github
novakps 7
  • Dashboard
  • Inbox 0
  • Account Settings
  • Log Out
Advanced Search
  • Explore GitHub
  • Gist
  • Blog
  • Help

kemia / kemia forked from novakps/kemia

  • Admin
  • Watch Unwatch
  • Fork
  • Your Fork
  • Where do you want to fork this to?

    Already forked to novakps! Go to the fork

    Already forked to kemia! Go to the fork

  • Pull Request
  • Download Source
    • 1
    • 2
  • Source
  • Commits
  • Network (2)
  • Fork Queue
  • Issues (16)
  • Downloads (0)
  • Wiki (4)
  • Graphs
  • Branch: development

click here to add a description

click here to add a homepage

  • Switch Branches (4)
    • development ✓
    • gh-pages
    • master
    • upstream
  • Switch Tags (0)
  • Branch List
Sending Request…

Try out the demo: — Read more

  Cancel

http://kemia.github.com/kemia/

  Cancel
  • SSH
  • HTTP
  • Git Read-Only

This URL has Read+Write access

update demo 
novakps (author)
Wed Aug 04 13:22:29 -0700 2010
commit  8976a4ff30edb6f54929
tree    43ae7afefaf9faef66ec
parent  fc199986a158a4664aee
kemia / build / kemia-whitespace-only.js build/kemia-whitespace-only.js
Txt 100644 1694 lines (1693 sloc) 787.674 kb
  • edit
  • raw
  • blame
  • history
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
var COMPILED=false;var goog=goog||{};goog.global=this;goog.DEBUG=true;goog.LOCALE="en";goog.evalWorksForGlobals_=null;goog.provide=function(name){if(!COMPILED){if(goog.getObjectByName(name)&&!goog.implicitNamespaces_[name])throw Error('Namespace "'+name+'" already declared.');var namespace=name;while(namespace=namespace.substring(0,namespace.lastIndexOf(".")))goog.implicitNamespaces_[namespace]=true}goog.exportPath_(name)};if(!COMPILED)goog.implicitNamespaces_={};
goog.exportPath_=function(name,opt_object,opt_objectToExportTo){var parts=name.split(".");var cur=opt_objectToExportTo||goog.global;if(!(parts[0]in cur)&&cur.execScript)cur.execScript("var "+parts[0]);for(var part;parts.length&&(part=parts.shift());)if(!parts.length&&goog.isDef(opt_object))cur[part]=opt_object;else if(cur[part])cur=cur[part];else cur=cur[part]={}};
goog.getObjectByName=function(name,opt_obj){var parts=name.split(".");var cur=opt_obj||goog.global;for(var part;part=parts.shift();)if(cur[part])cur=cur[part];else return null;return cur};goog.globalize=function(obj,opt_global){var global=opt_global||goog.global;for(var x in obj)global[x]=obj[x]};
goog.addDependency=function(relPath,provides,requires){if(!COMPILED){var provide,require;var path=relPath.replace(/\\/g,"/");var deps=goog.dependencies_;for(var i=0;provide=provides[i];i++){deps.nameToPath[provide]=path;if(!(path in deps.pathToNames))deps.pathToNames[path]={};deps.pathToNames[path][provide]=true}for(var j=0;require=requires[j];j++){if(!(path in deps.requires))deps.requires[path]={};deps.requires[path][require]=true}}};
goog.require=function(rule){if(!COMPILED){if(goog.getObjectByName(rule))return;var path=goog.getPathFromDeps_(rule);if(path){goog.included_[path]=true;goog.writeScripts_()}else{var errorMessage="goog.require could not find: "+rule;if(goog.global.console)goog.global.console["error"](errorMessage);throw Error(errorMessage);}}};goog.basePath="";goog.global.CLOSURE_BASE_PATH;goog.global.CLOSURE_NO_DEPS;goog.nullFunction=function(){};goog.identityFunction=function(var_args){return arguments[0]};
goog.abstractMethod=function(){throw Error("unimplemented abstract method");};goog.addSingletonGetter=function(ctor){ctor.getInstance=function(){return ctor.instance_||(ctor.instance_=new ctor)}};
if(!COMPILED){goog.included_={};goog.dependencies_={pathToNames:{},nameToPath:{},requires:{},visited:{},written:{}};goog.inHtmlDocument_=function(){var doc=goog.global.document;return typeof doc!="undefined"&&"write"in doc};goog.findBasePath_=function(){if(!goog.inHtmlDocument_())return;var doc=goog.global.document;if(goog.global.CLOSURE_BASE_PATH){goog.basePath=goog.global.CLOSURE_BASE_PATH;return}var scripts=doc.getElementsByTagName("script");for(var i=scripts.length-1;i>=0;--i){var src=scripts[i].src;
var l=src.length;if(src.substr(l-7)=="base.js"){goog.basePath=src.substr(0,l-7);return}}};goog.writeScriptTag_=function(src){if(goog.inHtmlDocument_()&&!goog.dependencies_.written[src]){goog.dependencies_.written[src]=true;var doc=goog.global.document;doc.write('<script type="text/javascript" src="'+src+'"></'+"script>")}};goog.writeScripts_=function(){var scripts=[];var seenScript={};var deps=goog.dependencies_;function visitNode(path){if(path in deps.written)return;if(path in deps.visited){if(!(path in
seenScript)){seenScript[path]=true;scripts.push(path)}return}deps.visited[path]=true;if(path in deps.requires)for(var requireName in deps.requires[path])if(requireName in deps.nameToPath)visitNode(deps.nameToPath[requireName]);else if(!goog.getObjectByName(requireName))throw Error("Undefined nameToPath for "+requireName);if(!(path in seenScript)){seenScript[path]=true;scripts.push(path)}}for(var path in goog.included_)if(!deps.written[path])visitNode(path);for(var i=0;i<scripts.length;i++)if(scripts[i])goog.writeScriptTag_(goog.basePath+
scripts[i]);else throw Error("Undefined script input");};goog.getPathFromDeps_=function(rule){if(rule in goog.dependencies_.nameToPath)return goog.dependencies_.nameToPath[rule];else return null};goog.findBasePath_();if(!goog.global.CLOSURE_NO_DEPS)goog.writeScriptTag_(goog.basePath+"deps.js")}
goog.typeOf=function(value){var s=typeof value;if(s=="object")if(value){if(value instanceof Array||!(value instanceof Object)&&Object.prototype.toString.call(value)=="[object Array]"||typeof value.length=="number"&&typeof value.splice!="undefined"&&typeof value.propertyIsEnumerable!="undefined"&&!value.propertyIsEnumerable("splice"))return"array";if(!(value instanceof Object)&&(Object.prototype.toString.call(value)=="[object Function]"||typeof value.call!="undefined"&&typeof value.propertyIsEnumerable!=
"undefined"&&!value.propertyIsEnumerable("call")))return"function"}else return"null";else if(s=="function"&&typeof value.call=="undefined")return"object";return s};goog.propertyIsEnumerableCustom_=function(object,propName){if(propName in object)for(var key in object)if(key==propName&&Object.prototype.hasOwnProperty.call(object,propName))return true;return false};
goog.propertyIsEnumerable_=function(object,propName){if(object instanceof Object)return Object.prototype.propertyIsEnumerable.call(object,propName);else return goog.propertyIsEnumerableCustom_(object,propName)};goog.isDef=function(val){return val!==undefined};goog.isNull=function(val){return val===null};goog.isDefAndNotNull=function(val){return val!=null};goog.isArray=function(val){return goog.typeOf(val)=="array"};
goog.isArrayLike=function(val){var type=goog.typeOf(val);return type=="array"||type=="object"&&typeof val.length=="number"};goog.isDateLike=function(val){return goog.isObject(val)&&typeof val.getFullYear=="function"};goog.isString=function(val){return typeof val=="string"};goog.isBoolean=function(val){return typeof val=="boolean"};goog.isNumber=function(val){return typeof val=="number"};goog.isFunction=function(val){return goog.typeOf(val)=="function"};
goog.isObject=function(val){var type=goog.typeOf(val);return type=="object"||type=="array"||type=="function"};goog.getUid=function(obj){if(obj.hasOwnProperty&&obj.hasOwnProperty(goog.UID_PROPERTY_))return obj[goog.UID_PROPERTY_];if(!obj[goog.UID_PROPERTY_])obj[goog.UID_PROPERTY_]=++goog.uidCounter_;return obj[goog.UID_PROPERTY_]};goog.removeUid=function(obj){if("removeAttribute"in obj)obj.removeAttribute(goog.UID_PROPERTY_);try{delete obj[goog.UID_PROPERTY_]}catch(ex){}};
goog.UID_PROPERTY_="closure_uid_"+Math.floor(Math.random()*2147483648).toString(36);goog.uidCounter_=0;goog.getHashCode=goog.getUid;goog.removeHashCode=goog.removeUid;goog.cloneObject=function(proto){var type=goog.typeOf(proto);if(type=="object"||type=="array"){if(proto.clone)return proto.clone.call(proto);var clone=type=="array"?[]:{};for(var key in proto)clone[key]=goog.cloneObject(proto[key]);return clone}return proto};Object.prototype.clone;
goog.bind=function(fn,selfObj,var_args){var context=selfObj||goog.global;if(arguments.length>2){var boundArgs=Array.prototype.slice.call(arguments,2);return function(){var newArgs=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(newArgs,boundArgs);return fn.apply(context,newArgs)}}else return function(){return fn.apply(context,arguments)}};
goog.partial=function(fn,var_args){var args=Array.prototype.slice.call(arguments,1);return function(){var newArgs=Array.prototype.slice.call(arguments);newArgs.unshift.apply(newArgs,args);return fn.apply(this,newArgs)}};goog.mixin=function(target,source){for(var x in source)target[x]=source[x]};goog.now=Date.now||function(){return+new Date};
goog.globalEval=function(script){if(goog.global.execScript)goog.global.execScript(script,"JavaScript");else if(goog.global.eval){if(goog.evalWorksForGlobals_==null){goog.global.eval("var _et_ = 1;");if(typeof goog.global["_et_"]!="undefined"){delete goog.global["_et_"];goog.evalWorksForGlobals_=true}else goog.evalWorksForGlobals_=false}if(goog.evalWorksForGlobals_)goog.global.eval(script);else{var doc=goog.global.document;var scriptElt=doc.createElement("script");scriptElt.type="text/javascript";
scriptElt.defer=false;scriptElt.appendChild(doc.createTextNode(script));doc.body.appendChild(scriptElt);doc.body.removeChild(scriptElt)}}else throw Error("goog.globalEval not available");};goog.typedef=true;goog.cssNameMapping_;goog.getCssName=function(className,opt_modifier){var cssName=className+(opt_modifier?"-"+opt_modifier:"");return goog.cssNameMapping_&&cssName in goog.cssNameMapping_?goog.cssNameMapping_[cssName]:cssName};goog.setCssNameMapping=function(mapping){goog.cssNameMapping_=mapping};
goog.getMsg=function(str,opt_values){var values=opt_values||{};for(var key in values)str=str.replace(new RegExp("\\{\\$"+key+"\\}","gi"),values[key]);return str};goog.exportSymbol=function(publicPath,object,opt_objectToExportTo){goog.exportPath_(publicPath,object,opt_objectToExportTo)};goog.exportProperty=function(object,publicName,symbol){object[publicName]=symbol};
goog.inherits=function(childCtor,parentCtor){function tempCtor(){}tempCtor.prototype=parentCtor.prototype;childCtor.superClass_=parentCtor.prototype;childCtor.prototype=new tempCtor;childCtor.prototype.constructor=childCtor};
goog.base=function(me,opt_methodName,var_args){var caller=arguments.callee.caller;if(caller.superClass_)return caller.superClass_.constructor.apply(me,Array.prototype.slice.call(arguments,1));var args=Array.prototype.slice.call(arguments,2);var foundCaller=false;for(var ctor=me.constructor;ctor;ctor=ctor.superClass_&&ctor.superClass_.constructor)if(ctor.prototype[opt_methodName]===caller)foundCaller=true;else if(foundCaller)return ctor.prototype[opt_methodName].apply(me,args);if(me[opt_methodName]===
caller)return me.constructor.prototype[opt_methodName].apply(me,args);else throw Error("goog.base called from a method of one name "+"to a method of a different name");};goog.provide("goog.Disposable");goog.provide("goog.dispose");goog.Disposable=function(){};goog.Disposable.prototype.disposed_=false;goog.Disposable.prototype.isDisposed=function(){return this.disposed_};goog.Disposable.prototype.getDisposed=goog.Disposable.prototype.isDisposed;goog.Disposable.prototype.dispose=function(){if(!this.disposed_){this.disposed_=true;this.disposeInternal()}};goog.Disposable.prototype.disposeInternal=function(){};goog.dispose=function(obj){if(obj&&typeof obj.dispose=="function")obj.dispose()};goog.provide("goog.array");goog.array.ArrayLike=goog.typedef;goog.array.peek=function(array){return array[array.length-1]};goog.array.ARRAY_PROTOTYPE_=Array.prototype;
goog.array.indexOf=goog.array.ARRAY_PROTOTYPE_.indexOf?function(arr,obj,opt_fromIndex){return goog.array.ARRAY_PROTOTYPE_.indexOf.call(arr,obj,opt_fromIndex)}:function(arr,obj,opt_fromIndex){var fromIndex=opt_fromIndex==null?0:opt_fromIndex<0?Math.max(0,arr.length+opt_fromIndex):opt_fromIndex;if(goog.isString(arr)){if(!goog.isString(obj)||obj.length!=1)return-1;return arr.indexOf(obj,fromIndex)}for(var i=fromIndex;i<arr.length;i++)if(i in arr&&arr[i]===obj)return i;return-1};
goog.array.lastIndexOf=goog.array.ARRAY_PROTOTYPE_.lastIndexOf?function(arr,obj,opt_fromIndex){var fromIndex=opt_fromIndex==null?arr.length-1:opt_fromIndex;return goog.array.ARRAY_PROTOTYPE_.lastIndexOf.call(arr,obj,fromIndex)}:function(arr,obj,opt_fromIndex){var fromIndex=opt_fromIndex==null?arr.length-1:opt_fromIndex;if(fromIndex<0)fromIndex=Math.max(0,arr.length+fromIndex);if(goog.isString(arr)){if(!goog.isString(obj)||obj.length!=1)return-1;return arr.lastIndexOf(obj,fromIndex)}for(var i=fromIndex;i>=
0;i--)if(i in arr&&arr[i]===obj)return i;return-1};goog.array.forEach=goog.array.ARRAY_PROTOTYPE_.forEach?function(arr,f,opt_obj){goog.array.ARRAY_PROTOTYPE_.forEach.call(arr,f,opt_obj)}:function(arr,f,opt_obj){var l=arr.length;var arr2=goog.isString(arr)?arr.split(""):arr;for(var i=0;i<l;i++)if(i in arr2)f.call(opt_obj,arr2[i],i,arr)};
goog.array.forEachRight=function(arr,f,opt_obj){var l=arr.length;var arr2=goog.isString(arr)?arr.split(""):arr;for(var i=l-1;i>=0;--i)if(i in arr2)f.call(opt_obj,arr2[i],i,arr)};
goog.array.filter=goog.array.ARRAY_PROTOTYPE_.filter?function(arr,f,opt_obj){return goog.array.ARRAY_PROTOTYPE_.filter.call(arr,f,opt_obj)}:function(arr,f,opt_obj){var l=arr.length;var res=[];var resLength=0;var arr2=goog.isString(arr)?arr.split(""):arr;for(var i=0;i<l;i++)if(i in arr2){var val=arr2[i];if(f.call(opt_obj,val,i,arr))res[resLength++]=val}return res};
goog.array.map=goog.array.ARRAY_PROTOTYPE_.map?function(arr,f,opt_obj){return goog.array.ARRAY_PROTOTYPE_.map.call(arr,f,opt_obj)}:function(arr,f,opt_obj){var l=arr.length;var res=new Array(l);var arr2=goog.isString(arr)?arr.split(""):arr;for(var i=0;i<l;i++)if(i in arr2)res[i]=f.call(opt_obj,arr2[i],i,arr);return res};
goog.array.reduce=function(arr,f,val,opt_obj){if(arr.reduce)if(opt_obj)return arr.reduce(goog.bind(f,opt_obj),val);else return arr.reduce(f,val);var rval=val;goog.array.forEach(arr,function(val,index){rval=f.call(opt_obj,rval,val,index,arr)});return rval};
goog.array.reduceRight=function(arr,f,val,opt_obj){if(arr.reduceRight)if(opt_obj)return arr.reduceRight(goog.bind(f,opt_obj),val);else return arr.reduceRight(f,val);var rval=val;goog.array.forEachRight(arr,function(val,index){rval=f.call(opt_obj,rval,val,index,arr)});return rval};
goog.array.some=goog.array.ARRAY_PROTOTYPE_.some?function(arr,f,opt_obj){return goog.array.ARRAY_PROTOTYPE_.some.call(arr,f,opt_obj)}:function(arr,f,opt_obj){var l=arr.length;var arr2=goog.isString(arr)?arr.split(""):arr;for(var i=0;i<l;i++)if(i in arr2&&f.call(opt_obj,arr2[i],i,arr))return true;return false};
goog.array.every=goog.array.ARRAY_PROTOTYPE_.every?function(arr,f,opt_obj){return goog.array.ARRAY_PROTOTYPE_.every.call(arr,f,opt_obj)}:function(arr,f,opt_obj){var l=arr.length;var arr2=goog.isString(arr)?arr.split(""):arr;for(var i=0;i<l;i++)if(i in arr2&&!f.call(opt_obj,arr2[i],i,arr))return false;return true};goog.array.find=function(arr,f,opt_obj){var i=goog.array.findIndex(arr,f,opt_obj);return i<0?null:goog.isString(arr)?arr.charAt(i):arr[i]};
goog.array.findIndex=function(arr,f,opt_obj){var l=arr.length;var arr2=goog.isString(arr)?arr.split(""):arr;for(var i=0;i<l;i++)if(i in arr2&&f.call(opt_obj,arr2[i],i,arr))return i;return-1};goog.array.findRight=function(arr,f,opt_obj){var i=goog.array.findIndexRight(arr,f,opt_obj);return i<0?null:goog.isString(arr)?arr.charAt(i):arr[i]};
goog.array.findIndexRight=function(arr,f,opt_obj){var l=arr.length;var arr2=goog.isString(arr)?arr.split(""):arr;for(var i=l-1;i>=0;i--)if(i in arr2&&f.call(opt_obj,arr2[i],i,arr))return i;return-1};goog.array.contains=function(arr,obj){return goog.array.indexOf(arr,obj)>=0};goog.array.isEmpty=function(arr){return arr.length==0};goog.array.clear=function(arr){if(!goog.isArray(arr))for(var i=arr.length-1;i>=0;i--)delete arr[i];arr.length=0};
goog.array.insert=function(arr,obj){if(!goog.array.contains(arr,obj))arr.push(obj)};goog.array.insertAt=function(arr,obj,opt_i){goog.array.splice(arr,opt_i,0,obj)};goog.array.insertArrayAt=function(arr,elementsToAdd,opt_i){goog.partial(goog.array.splice,arr,opt_i,0).apply(null,elementsToAdd)};goog.array.insertBefore=function(arr,obj,opt_obj2){var i;if(arguments.length==2||(i=goog.array.indexOf(arr,opt_obj2))<0)arr.push(obj);else goog.array.insertAt(arr,obj,i)};
goog.array.remove=function(arr,obj){var i=goog.array.indexOf(arr,obj);var rv;if(rv=i>=0)goog.array.removeAt(arr,i);return rv};goog.array.removeAt=function(arr,i){return goog.array.ARRAY_PROTOTYPE_.splice.call(arr,i,1).length==1};goog.array.removeIf=function(arr,f,opt_obj){var i=goog.array.findIndex(arr,f,opt_obj);if(i>=0){goog.array.removeAt(arr,i);return true}return false};goog.array.concat=function(var_args){return goog.array.ARRAY_PROTOTYPE_.concat.apply(goog.array.ARRAY_PROTOTYPE_,arguments)};
goog.array.clone=function(arr){if(goog.isArray(arr))return goog.array.concat(arr);else{var rv=[];for(var i=0,len=arr.length;i<len;i++)rv[i]=arr[i];return rv}};goog.array.toArray=function(object){if(goog.isArray(object))return goog.array.concat(object);return goog.array.clone(object)};
goog.array.extend=function(arr1,var_args){for(var i=1;i<arguments.length;i++){var arr2=arguments[i];var isArrayLike;if(goog.isArray(arr2)||(isArrayLike=goog.isArrayLike(arr2))&&arr2.hasOwnProperty("callee"))arr1.push.apply(arr1,arr2);else if(isArrayLike){var len1=arr1.length;var len2=arr2.length;for(var j=0;j<len2;j++)arr1[len1+j]=arr2[j]}else arr1.push(arr2)}};goog.array.splice=function(arr,index,howMany,var_args){return goog.array.ARRAY_PROTOTYPE_.splice.apply(arr,goog.array.slice(arguments,1))};
goog.array.slice=function(arr,start,opt_end){if(arguments.length<=2)return goog.array.ARRAY_PROTOTYPE_.slice.call(arr,start);else return goog.array.ARRAY_PROTOTYPE_.slice.call(arr,start,opt_end)};
goog.array.removeDuplicates=function(arr,opt_rv){var rv=opt_rv||arr;var seen={},cursorInsert=0,cursorRead=0;while(cursorRead<arr.length){var current=arr[cursorRead++];var uid=goog.isObject(current)?goog.getUid(current):current;if(!Object.prototype.hasOwnProperty.call(seen,uid)){seen[uid]=true;rv[cursorInsert++]=current}}rv.length=cursorInsert};goog.array.binarySearch=function(arr,target,opt_compareFn){return goog.array.binarySelect(arr,goog.partial(opt_compareFn||goog.array.defaultCompare,target))};
goog.array.binarySelect=function(arr,evaluator,opt_obj){var left=0;var right=arr.length-1;while(left<=right){var mid=left+right>>1;var evalResult=evaluator.call(opt_obj,arr[mid],mid,arr);if(evalResult>0)left=mid+1;else if(evalResult<0)right=mid-1;else return mid}return-(left+1)};goog.array.sort=function(arr,opt_compareFn){goog.array.ARRAY_PROTOTYPE_.sort.call(arr,opt_compareFn||goog.array.defaultCompare)};
goog.array.stableSort=function(arr,opt_compareFn){for(var i=0;i<arr.length;i++)arr[i]={index:i,value:arr[i]};var valueCompareFn=opt_compareFn||goog.array.defaultCompare;function stableCompareFn(obj1,obj2){return valueCompareFn(obj1.value,obj2.value)||obj1.index-obj2.index}goog.array.sort(arr,stableCompareFn);for(var i=0;i<arr.length;i++)arr[i]=arr[i].value};
goog.array.sortObjectsByKey=function(arr,key,opt_compareFn){var compare=opt_compareFn||goog.array.defaultCompare;goog.array.sort(arr,function(a,b){return compare(a[key],b[key])})};goog.array.equals=function(arr1,arr2,opt_equalsFn){if(!goog.isArrayLike(arr1)||!goog.isArrayLike(arr2)||arr1.length!=arr2.length)return false;var l=arr1.length;var equalsFn=opt_equalsFn||goog.array.defaultCompareEquality;for(var i=0;i<l;i++)if(!equalsFn(arr1[i],arr2[i]))return false;return true};
goog.array.compare=function(arr1,arr2,opt_equalsFn){return goog.array.equals(arr1,arr2,opt_equalsFn)};goog.array.defaultCompare=function(a,b){return a>b?1:a<b?-1:0};goog.array.defaultCompareEquality=function(a,b){return a===b};goog.array.binaryInsert=function(array,value,opt_compareFn){var index=goog.array.binarySearch(array,value,opt_compareFn);if(index<0){goog.array.insertAt(array,value,-(index+1));return true}return false};
goog.array.binaryRemove=function(array,value,opt_compareFn){var index=goog.array.binarySearch(array,value,opt_compareFn);return index>=0?goog.array.removeAt(array,index):false};goog.array.bucket=function(array,sorter){var buckets={};for(var i=0;i<array.length;i++){var value=array[i];var key=sorter(value,i,array);if(goog.isDef(key)){var bucket=buckets[key]||(buckets[key]=[]);bucket.push(value)}}return buckets};goog.array.repeat=function(value,n){var array=[];for(var i=0;i<n;i++)array[i]=value;return array};
goog.array.flatten=function(var_args){var result=[];for(var i=0;i<arguments.length;i++){var element=arguments[i];if(goog.isArray(element))result.push.apply(result,goog.array.flatten.apply(null,element));else result.push(element)}return result};goog.array.rotate=function(array,n){if(array.length){n%=array.length;if(n>0)goog.array.ARRAY_PROTOTYPE_.unshift.apply(array,array.splice(-n,n));else if(n<0)goog.array.ARRAY_PROTOTYPE_.push.apply(array,array.splice(0,-n))}return array};goog.provide("goog.debug.errorHandlerWeakDep");goog.debug.errorHandlerWeakDep={protectEntryPoint:function(fn,opt_tracers){return fn}};goog.provide("goog.events.Event");goog.require("goog.Disposable");goog.events.Event=function(type,opt_target){goog.Disposable.call(this);this.type=type;this.target=opt_target;this.currentTarget=this.target};goog.inherits(goog.events.Event,goog.Disposable);goog.events.Event.prototype.disposeInternal=function(){delete this.type;delete this.target;delete this.currentTarget};goog.events.Event.prototype.propagationStopped_=false;goog.events.Event.prototype.returnValue_=true;
goog.events.Event.prototype.stopPropagation=function(){this.propagationStopped_=true};goog.events.Event.prototype.preventDefault=function(){this.returnValue_=false};goog.events.Event.stopPropagation=function(e){e.stopPropagation()};goog.events.Event.preventDefault=function(e){e.preventDefault()};goog.provide("goog.string");goog.provide("goog.string.Unicode");goog.string.Unicode={NBSP:"\u00a0"};goog.string.startsWith=function(str,prefix){return str.lastIndexOf(prefix,0)==0};goog.string.endsWith=function(str,suffix){var l=str.length-suffix.length;return l>=0&&str.indexOf(suffix,l)==l};goog.string.caseInsensitiveStartsWith=function(str,prefix){return goog.string.caseInsensitiveCompare(prefix,str.substr(0,prefix.length))==0};
goog.string.caseInsensitiveEndsWith=function(str,suffix){return goog.string.caseInsensitiveCompare(suffix,str.substr(str.length-suffix.length,suffix.length))==0};goog.string.subs=function(str,var_args){for(var i=1;i<arguments.length;i++){var replacement=String(arguments[i]).replace(/\$/g,"$$$$");str=str.replace(/\%s/,replacement)}return str};goog.string.collapseWhitespace=function(str){return str.replace(/[\s\xa0]+/g," ").replace(/^\s+|\s+$/g,"")};goog.string.isEmpty=function(str){return/^[\s\xa0]*$/.test(str)};
goog.string.isEmptySafe=function(str){return goog.string.isEmpty(goog.string.makeSafe(str))};goog.string.isBreakingWhitespace=function(str){return!/[^\t\n\r ]/.test(str)};goog.string.isAlpha=function(str){return!/[^a-zA-Z]/.test(str)};goog.string.isNumeric=function(str){return!/[^0-9]/.test(str)};goog.string.isAlphaNumeric=function(str){return!/[^a-zA-Z0-9]/.test(str)};goog.string.isSpace=function(ch){return ch==" "};
goog.string.isUnicodeChar=function(ch){return ch.length==1&&ch>=" "&&ch<="~"||ch>="\u0080"&&ch<="\ufffd"};goog.string.stripNewlines=function(str){return str.replace(/(\r\n|\r|\n)+/g," ")};goog.string.canonicalizeNewlines=function(str){return str.replace(/(\r\n|\r|\n)/g,"\n")};goog.string.normalizeWhitespace=function(str){return str.replace(/\xa0|\s/g," ")};goog.string.normalizeSpaces=function(str){return str.replace(/\xa0|[ \t]+/g," ")};
goog.string.trim=function(str){return str.replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")};goog.string.trimLeft=function(str){return str.replace(/^[\s\xa0]+/,"")};goog.string.trimRight=function(str){return str.replace(/[\s\xa0]+$/,"")};goog.string.caseInsensitiveCompare=function(str1,str2){var test1=String(str1).toLowerCase();var test2=String(str2).toLowerCase();if(test1<test2)return-1;else if(test1==test2)return 0;else return 1};goog.string.numerateCompareRegExp_=/(\.\d+)|(\d+)|(\D+)/g;
goog.string.numerateCompare=function(str1,str2){if(str1==str2)return 0;if(!str1)return-1;if(!str2)return 1;var tokens1=str1.toLowerCase().match(goog.string.numerateCompareRegExp_);var tokens2=str2.toLowerCase().match(goog.string.numerateCompareRegExp_);var count=Math.min(tokens1.length,tokens2.length);for(var i=0;i<count;i++){var a=tokens1[i];var b=tokens2[i];if(a!=b){var num1=parseInt(a,10);if(!isNaN(num1)){var num2=parseInt(b,10);if(!isNaN(num2)&&num1-num2)return num1-num2}return a<b?-1:1}}if(tokens1.length!=
tokens2.length)return tokens1.length-tokens2.length;return str1<str2?-1:1};goog.string.encodeUriRegExp_=/^[a-zA-Z0-9\-_.!~*'()]*$/;goog.string.urlEncode=function(str){str=String(str);if(!goog.string.encodeUriRegExp_.test(str))return encodeURIComponent(str);return str};goog.string.urlDecode=function(str){return decodeURIComponent(str.replace(/\+/g," "))};goog.string.newLineToBr=function(str,opt_xml){return str.replace(/(\r\n|\r|\n)/g,opt_xml?"<br />":"<br>")};
goog.string.htmlEscape=function(str,opt_isLikelyToContainHtmlChars){if(opt_isLikelyToContainHtmlChars)return str.replace(goog.string.amperRe_,"&amp;").replace(goog.string.ltRe_,"&lt;").replace(goog.string.gtRe_,"&gt;").replace(goog.string.quotRe_,"&quot;");else{if(!goog.string.allRe_.test(str))return str;if(str.indexOf("&")!=-1)str=str.replace(goog.string.amperRe_,"&amp;");if(str.indexOf("<")!=-1)str=str.replace(goog.string.ltRe_,"&lt;");if(str.indexOf(">")!=-1)str=str.replace(goog.string.gtRe_,"&gt;");
if(str.indexOf('"')!=-1)str=str.replace(goog.string.quotRe_,"&quot;");return str}};goog.string.amperRe_=/&/g;goog.string.ltRe_=/</g;goog.string.gtRe_=/>/g;goog.string.quotRe_=/\"/g;goog.string.allRe_=/[&<>\"]/;goog.string.unescapeEntities=function(str){if(goog.string.contains(str,"&"))if("document"in goog.global&&!goog.string.contains(str,"<"))return goog.string.unescapeEntitiesUsingDom_(str);else return goog.string.unescapePureXmlEntities_(str);return str};
goog.string.unescapeEntitiesUsingDom_=function(str){var el=goog.global["document"]["createElement"]("a");el["innerHTML"]=str;if(el[goog.string.NORMALIZE_FN_])el[goog.string.NORMALIZE_FN_]();str=el["firstChild"]["nodeValue"];el["innerHTML"]="";return str};
goog.string.unescapePureXmlEntities_=function(str){return str.replace(/&([^;]+);/g,function(s,entity){switch(entity){case "amp":return"&";case "lt":return"<";case "gt":return">";case "quot":return'"';default:if(entity.charAt(0)=="#"){var n=Number("0"+entity.substr(1));if(!isNaN(n))return String.fromCharCode(n)}return s}})};goog.string.NORMALIZE_FN_="normalize";goog.string.whitespaceEscape=function(str,opt_xml){return goog.string.newLineToBr(str.replace(/ /g," &#160;"),opt_xml)};
goog.string.stripQuotes=function(str,quoteChars){var length=quoteChars.length;for(var i=0;i<length;i++){var quoteChar=length==1?quoteChars:quoteChars.charAt(i);if(str.charAt(0)==quoteChar&&str.charAt(str.length-1)==quoteChar)return str.substring(1,str.length-1)}return str};
goog.string.truncate=function(str,chars,opt_protectEscapedCharacters){if(opt_protectEscapedCharacters)str=goog.string.unescapeEntities(str);if(str.length>chars)str=str.substring(0,chars-3)+"...";if(opt_protectEscapedCharacters)str=goog.string.htmlEscape(str);return str};
goog.string.truncateMiddle=function(str,chars,opt_protectEscapedCharacters){if(opt_protectEscapedCharacters)str=goog.string.unescapeEntities(str);if(str.length>chars){var half=Math.floor(chars/2);var endPos=str.length-half;half+=chars%2;str=str.substring(0,half)+"..."+str.substring(endPos)}if(opt_protectEscapedCharacters)str=goog.string.htmlEscape(str);return str};goog.string.jsEscapeCache_={"\u0008":"\\b","\u000c":"\\f","\n":"\\n","\r":"\\r","\t":"\\t","\u000b":"\\x0B",'"':'\\"',"'":"\\'","\\":"\\\\"};
goog.string.quote=function(s){s=String(s);if(s.quote)return s.quote();else{var sb=['"'];for(var i=0;i<s.length;i++)sb[i+1]=goog.string.escapeChar(s.charAt(i));sb.push('"');return sb.join("")}};
goog.string.escapeChar=function(c){if(c in goog.string.jsEscapeCache_)return goog.string.jsEscapeCache_[c];var rv=c;var cc=c.charCodeAt(0);if(cc>31&&cc<127)rv=c;else{if(cc<256){rv="\\x";if(cc<16||cc>256)rv+="0"}else{rv="\\u";if(cc<4096)rv+="0"}rv+=cc.toString(16).toUpperCase()}return goog.string.jsEscapeCache_[c]=rv};goog.string.toMap=function(s){var rv={};for(var i=0;i<s.length;i++)rv[s.charAt(i)]=true;return rv};goog.string.contains=function(s,ss){return s.indexOf(ss)!=-1};
goog.string.removeAt=function(s,index,stringLength){var resultStr=s;if(index>=0&&index<s.length&&stringLength>0)resultStr=s.substr(0,index)+s.substr(index+stringLength,s.length-index-stringLength);return resultStr};goog.string.remove=function(s,ss){var re=new RegExp(goog.string.regExpEscape(ss),"");return s.replace(re,"")};goog.string.removeAll=function(s,ss){var re=new RegExp(goog.string.regExpEscape(ss),"g");return s.replace(re,"")};
goog.string.regExpEscape=function(s){return String(s).replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g,"\\$1").replace(/\x08/g,"\\x08")};goog.string.repeat=function(string,length){return(new Array(length+1)).join(string)};goog.string.padNumber=function(num,length,opt_precision){var s=goog.isDef(opt_precision)?num.toFixed(opt_precision):String(num);var index=s.indexOf(".");if(index==-1)index=s.length;return goog.string.repeat("0",Math.max(0,length-index))+s};
goog.string.makeSafe=function(obj){return obj==null?"":String(obj)};goog.string.buildString=function(var_args){return Array.prototype.join.call(arguments,"")};goog.string.getRandomString=function(){return Math.floor(Math.random()*2147483648).toString(36)+(Math.floor(Math.random()*2147483648)^goog.now()).toString(36)};
goog.string.compareVersions=function(version1,version2){var order=0;var v1Subs=goog.string.trim(String(version1)).split(".");var v2Subs=goog.string.trim(String(version2)).split(".");var subCount=Math.max(v1Subs.length,v2Subs.length);for(var subIdx=0;order==0&&subIdx<subCount;subIdx++){var v1Sub=v1Subs[subIdx]||"";var v2Sub=v2Subs[subIdx]||"";var v1CompParser=new RegExp("(\\d*)(\\D*)","g");var v2CompParser=new RegExp("(\\d*)(\\D*)","g");do{var v1Comp=v1CompParser.exec(v1Sub)||["","",""];var v2Comp=
v2CompParser.exec(v2Sub)||["","",""];if(v1Comp[0].length==0&&v2Comp[0].length==0)break;var v1CompNum=v1Comp[1].length==0?0:parseInt(v1Comp[1],10);var v2CompNum=v2Comp[1].length==0?0:parseInt(v2Comp[1],10);order=goog.string.compareElements_(v1CompNum,v2CompNum)||goog.string.compareElements_(v1Comp[2].length==0,v2Comp[2].length==0)||goog.string.compareElements_(v1Comp[2],v2Comp[2])}while(order==0)}return order};
goog.string.compareElements_=function(left,right){if(left<right)return-1;else if(left>right)return 1;return 0};goog.string.HASHCODE_MAX_=4294967296;goog.string.hashCode=function(str){var result=0;for(var i=0;i<str.length;++i){result=31*result+str.charCodeAt(i);result%=goog.string.HASHCODE_MAX_}return result};goog.string.uniqueStringCounter_=Math.random()*2147483648|0;goog.string.createUniqueString=function(){return"goog_"+goog.string.uniqueStringCounter_++};
goog.string.toNumber=function(str){var num=Number(str);if(num==0&&goog.string.isEmpty(str))return NaN;return num};goog.provide("goog.userAgent");goog.require("goog.string");goog.userAgent.ASSUME_IE=false;goog.userAgent.ASSUME_GECKO=false;goog.userAgent.ASSUME_WEBKIT=false;goog.userAgent.ASSUME_MOBILE_WEBKIT=false;goog.userAgent.ASSUME_OPERA=false;goog.userAgent.BROWSER_KNOWN_=goog.userAgent.ASSUME_IE||goog.userAgent.ASSUME_GECKO||goog.userAgent.ASSUME_MOBILE_WEBKIT||goog.userAgent.ASSUME_WEBKIT||goog.userAgent.ASSUME_OPERA;
goog.userAgent.getUserAgentString=function(){return goog.global["navigator"]?goog.global["navigator"].userAgent:null};goog.userAgent.getNavigator=function(){return goog.global["navigator"]};
goog.userAgent.init_=function(){goog.userAgent.detectedOpera_=false;goog.userAgent.detectedIe_=false;goog.userAgent.detectedWebkit_=false;goog.userAgent.detectedMobile_=false;goog.userAgent.detectedGecko_=false;var ua;if(!goog.userAgent.BROWSER_KNOWN_&&(ua=goog.userAgent.getUserAgentString())){var navigator=goog.userAgent.getNavigator();goog.userAgent.detectedOpera_=ua.indexOf("Opera")==0;goog.userAgent.detectedIe_=!goog.userAgent.detectedOpera_&&ua.indexOf("MSIE")!=-1;goog.userAgent.detectedWebkit_=
!goog.userAgent.detectedOpera_&&ua.indexOf("WebKit")!=-1;goog.userAgent.detectedMobile_=goog.userAgent.detectedWebkit_&&ua.indexOf("Mobile")!=-1;goog.userAgent.detectedGecko_=!goog.userAgent.detectedOpera_&&!goog.userAgent.detectedWebkit_&&navigator.product=="Gecko"}};if(!goog.userAgent.BROWSER_KNOWN_)goog.userAgent.init_();goog.userAgent.OPERA=goog.userAgent.BROWSER_KNOWN_?goog.userAgent.ASSUME_OPERA:goog.userAgent.detectedOpera_;
goog.userAgent.IE=goog.userAgent.BROWSER_KNOWN_?goog.userAgent.ASSUME_IE:goog.userAgent.detectedIe_;goog.userAgent.GECKO=goog.userAgent.BROWSER_KNOWN_?goog.userAgent.ASSUME_GECKO:goog.userAgent.detectedGecko_;goog.userAgent.WEBKIT=goog.userAgent.BROWSER_KNOWN_?goog.userAgent.ASSUME_WEBKIT||goog.userAgent.ASSUME_MOBILE_WEBKIT:goog.userAgent.detectedWebkit_;goog.userAgent.MOBILE=goog.userAgent.ASSUME_MOBILE_WEBKIT||goog.userAgent.detectedMobile_;goog.userAgent.SAFARI=goog.userAgent.WEBKIT;
goog.userAgent.determinePlatform_=function(){var navigator=goog.userAgent.getNavigator();return navigator&&navigator.platform||""};goog.userAgent.PLATFORM=goog.userAgent.determinePlatform_();goog.userAgent.ASSUME_MAC=false;goog.userAgent.ASSUME_WINDOWS=false;goog.userAgent.ASSUME_LINUX=false;goog.userAgent.ASSUME_X11=false;goog.userAgent.PLATFORM_KNOWN_=goog.userAgent.ASSUME_MAC||goog.userAgent.ASSUME_WINDOWS||goog.userAgent.ASSUME_LINUX||goog.userAgent.ASSUME_X11;
goog.userAgent.initPlatform_=function(){goog.userAgent.detectedMac_=goog.string.contains(goog.userAgent.PLATFORM,"Mac");goog.userAgent.detectedWindows_=goog.string.contains(goog.userAgent.PLATFORM,"Win");goog.userAgent.detectedLinux_=goog.string.contains(goog.userAgent.PLATFORM,"Linux");goog.userAgent.detectedX11_=!!goog.userAgent.getNavigator()&&goog.string.contains(goog.userAgent.getNavigator()["appVersion"]||"","X11")};if(!goog.userAgent.PLATFORM_KNOWN_)goog.userAgent.initPlatform_();
goog.userAgent.MAC=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_MAC:goog.userAgent.detectedMac_;goog.userAgent.WINDOWS=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_WINDOWS:goog.userAgent.detectedWindows_;goog.userAgent.LINUX=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_LINUX:goog.userAgent.detectedLinux_;goog.userAgent.X11=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_X11:goog.userAgent.detectedX11_;
goog.userAgent.determineVersion_=function(){var version="",re;if(goog.userAgent.OPERA&&goog.global["opera"]){var operaVersion=goog.global["opera"].version;version=typeof operaVersion=="function"?operaVersion():operaVersion}else{if(goog.userAgent.GECKO)re=/rv\:([^\);]+)(\)|;)/;else if(goog.userAgent.IE)re=/MSIE\s+([^\);]+)(\)|;)/;else if(goog.userAgent.WEBKIT)re=/WebKit\/(\S+)/;if(re){var arr=re.exec(goog.userAgent.getUserAgentString());version=arr?arr[1]:""}}return version};
goog.userAgent.VERSION=goog.userAgent.determineVersion_();goog.userAgent.compare=function(v1,v2){return goog.string.compareVersions(v1,v2)};goog.userAgent.isVersionCache_={};goog.userAgent.isVersion=function(version){return goog.userAgent.isVersionCache_[version]||(goog.userAgent.isVersionCache_[version]=goog.string.compareVersions(goog.userAgent.VERSION,version)>=0)};goog.provide("goog.events.BrowserEvent");goog.provide("goog.events.BrowserEvent.MouseButton");goog.require("goog.events.Event");goog.require("goog.userAgent");goog.events.BrowserEvent=function(opt_e,opt_currentTarget){if(opt_e)this.init(opt_e,opt_currentTarget)};goog.inherits(goog.events.BrowserEvent,goog.events.Event);goog.events.BrowserEvent.MouseButton={LEFT:0,MIDDLE:1,RIGHT:2};goog.events.BrowserEvent.IEButtonMap_=[1,4,2];goog.events.BrowserEvent.prototype.target=null;goog.events.BrowserEvent.prototype.currentTarget;
goog.events.BrowserEvent.prototype.relatedTarget=null;goog.events.BrowserEvent.prototype.offsetX=0;goog.events.BrowserEvent.prototype.offsetY=0;goog.events.BrowserEvent.prototype.clientX=0;goog.events.BrowserEvent.prototype.clientY=0;goog.events.BrowserEvent.prototype.screenX=0;goog.events.BrowserEvent.prototype.screenY=0;goog.events.BrowserEvent.prototype.button=0;goog.events.BrowserEvent.prototype.keyCode=0;goog.events.BrowserEvent.prototype.charCode=0;
goog.events.BrowserEvent.prototype.ctrlKey=false;goog.events.BrowserEvent.prototype.altKey=false;goog.events.BrowserEvent.prototype.shiftKey=false;goog.events.BrowserEvent.prototype.metaKey=false;goog.events.BrowserEvent.prototype.platformModifierKey=false;goog.events.BrowserEvent.prototype.event_=null;
goog.events.BrowserEvent.prototype.init=function(e,opt_currentTarget){var type=this.type=e.type;this.target=e.target||e.srcElement;this.currentTarget=opt_currentTarget;var relatedTarget=e.relatedTarget;if(relatedTarget){if(goog.userAgent.GECKO)try{relatedTarget=relatedTarget.nodeName&&relatedTarget}catch(err){relatedTarget=null}}else if(type=="mouseover")relatedTarget=e.fromElement;else if(type=="mouseout")relatedTarget=e.toElement;this.relatedTarget=relatedTarget;this.offsetX=e.offsetX!==undefined?
e.offsetX:e.layerX;this.offsetY=e.offsetY!==undefined?e.offsetY:e.layerY;this.clientX=e.clientX!==undefined?e.clientX:e.pageX;this.clientY=e.clientY!==undefined?e.clientY:e.pageY;this.screenX=e.screenX||0;this.screenY=e.screenY||0;this.button=e.button;this.keyCode=e.keyCode||0;this.charCode=e.charCode||(type=="keypress"?e.keyCode:0);this.ctrlKey=e.ctrlKey;this.altKey=e.altKey;this.shiftKey=e.shiftKey;this.metaKey=e.metaKey;this.platformModifierKey=goog.userAgent.MAC?e.metaKey:e.ctrlKey;this.event_=
e;delete this.returnValue_;delete this.propagationStopped_};goog.events.BrowserEvent.prototype.isButton=function(button){if(goog.userAgent.IE)if(this.type=="click")return button==goog.events.BrowserEvent.MouseButton.LEFT;else return!!(this.event_.button&goog.events.BrowserEvent.IEButtonMap_[button]);else return this.event_.button==button};
goog.events.BrowserEvent.prototype.stopPropagation=function(){this.propagationStopped_=true;if(this.event_.stopPropagation)this.event_.stopPropagation();else this.event_.cancelBubble=true};goog.events.BrowserEvent.IE7_SET_KEY_CODE_TO_PREVENT_DEFAULT_=goog.userAgent.IE&&!goog.userAgent.isVersion("8");
goog.events.BrowserEvent.prototype.preventDefault=function(){this.returnValue_=false;var be=this.event_;if(!be.preventDefault){be.returnValue=false;if(goog.events.BrowserEvent.IE7_SET_KEY_CODE_TO_PREVENT_DEFAULT_)try{var VK_F1=112;var VK_F12=123;if(be.ctrlKey||be.keyCode>=VK_F1&&be.keyCode<=VK_F12)be.keyCode=-1}catch(ex){}}else be.preventDefault()};goog.events.BrowserEvent.prototype.getBrowserEvent=function(){return this.event_};
goog.events.BrowserEvent.prototype.disposeInternal=function(){goog.events.BrowserEvent.superClass_.disposeInternal.call(this);this.event_=null;this.target=null;this.currentTarget=null;this.relatedTarget=null};goog.provide("goog.events.EventWrapper");goog.events.EventWrapper=function(){};goog.events.EventWrapper.prototype.listen=function(src,listener,opt_capt,opt_scope,opt_eventHandler){};goog.events.EventWrapper.prototype.unlisten=function(src,listener,opt_capt,opt_scope,opt_eventHandler){};goog.provide("goog.events.Listener");goog.events.Listener=function(){};goog.events.Listener.counter_=0;goog.events.Listener.prototype.isFunctionListener_;goog.events.Listener.prototype.listener;goog.events.Listener.prototype.proxy;goog.events.Listener.prototype.src;goog.events.Listener.prototype.type;goog.events.Listener.prototype.capture;goog.events.Listener.prototype.handler;goog.events.Listener.prototype.key=0;goog.events.Listener.prototype.removed=false;
goog.events.Listener.prototype.callOnce=false;
goog.events.Listener.prototype.init=function(listener,proxy,src,type,capture,opt_handler){if(goog.isFunction(listener))this.isFunctionListener_=true;else if(listener&&listener.handleEvent&&goog.isFunction(listener.handleEvent))this.isFunctionListener_=false;else throw Error("Invalid listener argument");this.listener=listener;this.proxy=proxy;this.src=src;this.type=type;this.capture=!!capture;this.handler=opt_handler;this.callOnce=false;this.key=++goog.events.Listener.counter_;this.removed=false};
goog.events.Listener.prototype.handleEvent=function(eventObject){if(this.isFunctionListener_)return this.listener.call(this.handler||this.src,eventObject);return this.listener.handleEvent.call(this.listener,eventObject)};goog.provide("goog.structs.SimplePool");goog.require("goog.Disposable");goog.structs.SimplePool=function(initialCount,maxCount){goog.Disposable.call(this);this.maxCount_=maxCount;this.freeQueue_=[];this.createInitial_(initialCount)};goog.inherits(goog.structs.SimplePool,goog.Disposable);goog.structs.SimplePool.prototype.createObjectFn_=null;goog.structs.SimplePool.prototype.disposeObjectFn_=null;goog.structs.SimplePool.prototype.setCreateObjectFn=function(createObjectFn){this.createObjectFn_=createObjectFn};
goog.structs.SimplePool.prototype.setDisposeObjectFn=function(disposeObjectFn){this.disposeObjectFn_=disposeObjectFn};goog.structs.SimplePool.prototype.getObject=function(){if(this.freeQueue_.length)return this.freeQueue_.pop();return this.createObject()};goog.structs.SimplePool.prototype.releaseObject=function(obj){if(this.freeQueue_.length<this.maxCount_)this.freeQueue_.push(obj);else this.disposeObject(obj)};
goog.structs.SimplePool.prototype.createInitial_=function(initialCount){if(initialCount>this.maxCount_)throw Error("[goog.structs.SimplePool] Initial cannot be greater than max");for(var i=0;i<initialCount;i++)this.freeQueue_.push(this.createObject())};goog.structs.SimplePool.prototype.createObject=function(){if(this.createObjectFn_)return this.createObjectFn_();else return{}};
goog.structs.SimplePool.prototype.disposeObject=function(obj){if(this.disposeObjectFn_)this.disposeObjectFn_(obj);else if(goog.isFunction(obj.dispose))obj.dispose();else for(var i in obj)delete obj[i]};goog.structs.SimplePool.prototype.disposeInternal=function(){goog.structs.SimplePool.superClass_.disposeInternal.call(this);var freeQueue=this.freeQueue_;while(freeQueue.length)this.disposeObject(freeQueue.pop());delete this.freeQueue_};goog.provide("goog.userAgent.jscript");goog.require("goog.string");goog.userAgent.jscript.ASSUME_NO_JSCRIPT=false;
goog.userAgent.jscript.init_=function(){var hasScriptEngine="ScriptEngine"in goog.global;goog.userAgent.jscript.DETECTED_HAS_JSCRIPT_=hasScriptEngine&&goog.global["ScriptEngine"]()=="JScript";goog.userAgent.jscript.DETECTED_VERSION_=goog.userAgent.jscript.DETECTED_HAS_JSCRIPT_?goog.global["ScriptEngineMajorVersion"]()+"."+goog.global["ScriptEngineMinorVersion"]()+"."+goog.global["ScriptEngineBuildVersion"]():"0"};if(!goog.userAgent.jscript.ASSUME_NO_JSCRIPT)goog.userAgent.jscript.init_();
goog.userAgent.jscript.HAS_JSCRIPT=goog.userAgent.jscript.ASSUME_NO_JSCRIPT?false:goog.userAgent.jscript.DETECTED_HAS_JSCRIPT_;goog.userAgent.jscript.VERSION=goog.userAgent.jscript.ASSUME_NO_JSCRIPT?"0":goog.userAgent.jscript.DETECTED_VERSION_;goog.userAgent.jscript.isVersion=function(version){return goog.string.compareVersions(goog.userAgent.jscript.VERSION,version)>=0};goog.provide("goog.events.pools");goog.require("goog.events.BrowserEvent");goog.require("goog.events.Listener");goog.require("goog.structs.SimplePool");goog.require("goog.userAgent.jscript");goog.events.pools.getObject;goog.events.pools.releaseObject;goog.events.pools.getArray;goog.events.pools.releaseArray;goog.events.pools.getProxy;goog.events.pools.setProxyCallbackFunction;goog.events.pools.releaseProxy;goog.events.pools.getListener;goog.events.pools.releaseListener;goog.events.pools.getEvent;
goog.events.pools.releaseEvent;
(function(){var BAD_GC=goog.userAgent.jscript.HAS_JSCRIPT&&!goog.userAgent.jscript.isVersion("5.7");function getObject(){return{count_:0,remaining_:0}}function getArray(){return[]}var proxyCallbackFunction;goog.events.pools.setProxyCallbackFunction=function(cb){proxyCallbackFunction=cb};function getProxy(){var f=function(eventObject){return proxyCallbackFunction.call(f.src,f.key,eventObject)};return f}function getListener(){return new goog.events.Listener}function getEvent(){return new goog.events.BrowserEvent}if(!BAD_GC){goog.events.pools.getObject=
getObject;goog.events.pools.releaseObject=goog.nullFunction;goog.events.pools.getArray=getArray;goog.events.pools.releaseArray=goog.nullFunction;goog.events.pools.getProxy=getProxy;goog.events.pools.releaseProxy=goog.nullFunction;goog.events.pools.getListener=getListener;goog.events.pools.releaseListener=goog.nullFunction;goog.events.pools.getEvent=getEvent;goog.events.pools.releaseEvent=goog.nullFunction}else{goog.events.pools.getObject=function(){return objectPool.getObject()};goog.events.pools.releaseObject=
function(obj){objectPool.releaseObject(obj)};goog.events.pools.getArray=function(){return arrayPool.getObject()};goog.events.pools.releaseArray=function(obj){arrayPool.releaseObject(obj)};goog.events.pools.getProxy=function(){return proxyPool.getObject()};goog.events.pools.releaseProxy=function(obj){proxyPool.releaseObject(getProxy())};goog.events.pools.getListener=function(){return listenerPool.getObject()};goog.events.pools.releaseListener=function(obj){listenerPool.releaseObject(obj)};goog.events.pools.getEvent=
function(){return eventPool.getObject()};goog.events.pools.releaseEvent=function(obj){eventPool.releaseObject(obj)};var OBJECT_POOL_INITIAL_COUNT=0;var OBJECT_POOL_MAX_COUNT=600;var objectPool=new goog.structs.SimplePool(OBJECT_POOL_INITIAL_COUNT,OBJECT_POOL_MAX_COUNT);objectPool.setCreateObjectFn(getObject);var ARRAY_POOL_INITIAL_COUNT=0;var ARRAY_POOL_MAX_COUNT=600;var arrayPool=new goog.structs.SimplePool(ARRAY_POOL_INITIAL_COUNT,ARRAY_POOL_MAX_COUNT);arrayPool.setCreateObjectFn(getArray);var HANDLE_EVENT_PROXY_POOL_INITIAL_COUNT=
0;var HANDLE_EVENT_PROXY_POOL_MAX_COUNT=600;var proxyPool=new goog.structs.SimplePool(HANDLE_EVENT_PROXY_POOL_INITIAL_COUNT,HANDLE_EVENT_PROXY_POOL_MAX_COUNT);proxyPool.setCreateObjectFn(getProxy);var LISTENER_POOL_INITIAL_COUNT=0;var LISTENER_POOL_MAX_COUNT=600;var listenerPool=new goog.structs.SimplePool(LISTENER_POOL_INITIAL_COUNT,LISTENER_POOL_MAX_COUNT);listenerPool.setCreateObjectFn(getListener);var EVENT_POOL_INITIAL_COUNT=0;var EVENT_POOL_MAX_COUNT=600;var eventPool=new goog.structs.SimplePool(EVENT_POOL_INITIAL_COUNT,
EVENT_POOL_MAX_COUNT);eventPool.setCreateObjectFn(getEvent)}})();goog.provide("goog.object");goog.object.forEach=function(obj,f,opt_obj){for(var key in obj)f.call(opt_obj,obj[key],key,obj)};goog.object.filter=function(obj,f,opt_obj){var res={};for(var key in obj)if(f.call(opt_obj,obj[key],key,obj))res[key]=obj[key];return res};goog.object.map=function(obj,f,opt_obj){var res={};for(var key in obj)res[key]=f.call(opt_obj,obj[key],key,obj);return res};goog.object.some=function(obj,f,opt_obj){for(var key in obj)if(f.call(opt_obj,obj[key],key,obj))return true;return false};
goog.object.every=function(obj,f,opt_obj){for(var key in obj)if(!f.call(opt_obj,obj[key],key,obj))return false;return true};goog.object.getCount=function(obj){var rv=0;for(var key in obj)rv++;return rv};goog.object.getAnyKey=function(obj){for(var key in obj)return key};goog.object.getAnyValue=function(obj){for(var key in obj)return obj[key]};goog.object.contains=function(obj,val){return goog.object.containsValue(obj,val)};
goog.object.getValues=function(obj){var res=[];var i=0;for(var key in obj)res[i++]=obj[key];return res};goog.object.getKeys=function(obj){var res=[];var i=0;for(var key in obj)res[i++]=key;return res};goog.object.containsKey=function(obj,key){return key in obj};goog.object.containsValue=function(obj,val){for(var key in obj)if(obj[key]==val)return true;return false};goog.object.findKey=function(obj,f,opt_this){for(var key in obj)if(f.call(opt_this,obj[key],key,obj))return key;return undefined};
goog.object.findValue=function(obj,f,opt_this){var key=goog.object.findKey(obj,f,opt_this);return key&&obj[key]};goog.object.isEmpty=function(obj){for(var key in obj)return false;return true};goog.object.clear=function(obj){var keys=goog.object.getKeys(obj);for(var i=keys.length-1;i>=0;i--)goog.object.remove(obj,keys[i])};goog.object.remove=function(obj,key){var rv;if(rv=key in obj)delete obj[key];return rv};
goog.object.add=function(obj,key,val){if(key in obj)throw Error('The object already contains the key "'+key+'"');goog.object.set(obj,key,val)};goog.object.get=function(obj,key,opt_val){if(key in obj)return obj[key];return opt_val};goog.object.set=function(obj,key,value){obj[key]=value};goog.object.setIfUndefined=function(obj,key,value){return key in obj?obj[key]:(obj[key]=value)};goog.object.clone=function(obj){var res={};for(var key in obj)res[key]=obj[key];return res};
goog.object.transpose=function(obj){var transposed={};for(var key in obj)transposed[obj[key]]=key;return transposed};goog.object.PROTOTYPE_FIELDS_=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"];
goog.object.extend=function(target,var_args){var key,source;for(var i=1;i<arguments.length;i++){source=arguments[i];for(key in source)target[key]=source[key];for(var j=0;j<goog.object.PROTOTYPE_FIELDS_.length;j++){key=goog.object.PROTOTYPE_FIELDS_[j];if(Object.prototype.hasOwnProperty.call(source,key))target[key]=source[key]}}};
goog.object.create=function(var_args){var argLength=arguments.length;if(argLength==1&&goog.isArray(arguments[0]))return goog.object.create.apply(null,arguments[0]);if(argLength%2)throw Error("Uneven number of arguments");var rv={};for(var i=0;i<argLength;i+=2)rv[arguments[i]]=arguments[i+1];return rv};
goog.object.createSet=function(var_args){var argLength=arguments.length;if(argLength==1&&goog.isArray(arguments[0]))return goog.object.createSet.apply(null,arguments[0]);var rv={};for(var i=0;i<argLength;i++)rv[arguments[i]]=true;return rv};goog.provide("goog.events");goog.provide("goog.events.EventType");goog.require("goog.array");goog.require("goog.debug.errorHandlerWeakDep");goog.require("goog.events.BrowserEvent");goog.require("goog.events.Event");goog.require("goog.events.EventWrapper");goog.require("goog.events.pools");goog.require("goog.object");goog.require("goog.userAgent");goog.events.listeners_={};goog.events.listenerTree_={};goog.events.sources_={};goog.events.onString_="on";goog.events.onStringMap_={};
goog.events.keySeparator_="_";
goog.events.listen=function(src,type,listener,opt_capt,opt_handler){if(!type)throw Error("Invalid event type");else if(goog.isArray(type)){for(var i=0;i<type.length;i++)goog.events.listen(src,type[i],listener,opt_capt,opt_handler);return null}else{var capture=!!opt_capt;var map=goog.events.listenerTree_;if(!(type in map))map[type]=goog.events.pools.getObject();map=map[type];if(!(capture in map)){map[capture]=goog.events.pools.getObject();map.count_++}map=map[capture];var srcUid=goog.getUid(src);var listenerArray,
listenerObj;map.remaining_++;if(!map[srcUid]){listenerArray=map[srcUid]=goog.events.pools.getArray();map.count_++}else{listenerArray=map[srcUid];for(var i=0;i<listenerArray.length;i++){listenerObj=listenerArray[i];if(listenerObj.listener==listener&&listenerObj.handler==opt_handler){if(listenerObj.removed)break;return listenerArray[i].key}}}var proxy=goog.events.pools.getProxy();proxy.src=src;listenerObj=goog.events.pools.getListener();listenerObj.init(listener,proxy,src,type,capture,opt_handler);
var key=listenerObj.key;proxy.key=key;listenerArray.push(listenerObj);goog.events.listeners_[key]=listenerObj;if(!goog.events.sources_[srcUid])goog.events.sources_[srcUid]=goog.events.pools.getArray();goog.events.sources_[srcUid].push(listenerObj);if(src.addEventListener){if(src==goog.global||!src.customEvent_)src.addEventListener(type,proxy,capture)}else src.attachEvent(goog.events.getOnString_(type),proxy);return key}};
goog.events.listenOnce=function(src,type,listener,opt_capt,opt_handler){if(goog.isArray(type)){for(var i=0;i<type.length;i++)goog.events.listenOnce(src,type[i],listener,opt_capt,opt_handler);return null}var key=goog.events.listen(src,type,listener,opt_capt,opt_handler);var listenerObj=goog.events.listeners_[key];listenerObj.callOnce=true;return key};goog.events.listenWithWrapper=function(src,wrapper,listener,opt_capt,opt_handler){wrapper.listen(src,listener,opt_capt,opt_handler)};
goog.events.unlisten=function(src,type,listener,opt_capt,opt_handler){if(goog.isArray(type)){for(var i=0;i<type.length;i++)goog.events.unlisten(src,type[i],listener,opt_capt,opt_handler);return null}var capture=!!opt_capt;var listenerArray=goog.events.getListeners_(src,type,capture);if(!listenerArray)return false;for(var i=0;i<listenerArray.length;i++)if(listenerArray[i].listener==listener&&listenerArray[i].capture==capture&&listenerArray[i].handler==opt_handler)return goog.events.unlistenByKey(listenerArray[i].key);
return false};
goog.events.unlistenByKey=function(key){if(!goog.events.listeners_[key])return false;var listener=goog.events.listeners_[key];if(listener.removed)return false;var src=listener.src;var type=listener.type;var proxy=listener.proxy;var capture=listener.capture;if(src.removeEventListener){if(src==goog.global||!src.customEvent_)src.removeEventListener(type,proxy,capture)}else if(src.detachEvent)src.detachEvent(goog.events.getOnString_(type),proxy);var srcUid=goog.getUid(src);var listenerArray=goog.events.listenerTree_[type][capture][srcUid];
if(goog.events.sources_[srcUid]){var sourcesArray=goog.events.sources_[srcUid];goog.array.remove(sourcesArray,listener);if(sourcesArray.length==0)delete goog.events.sources_[srcUid]}listener.removed=true;listenerArray.needsCleanup_=true;goog.events.cleanUp_(type,capture,srcUid,listenerArray);delete goog.events.listeners_[key];return true};goog.events.unlistenWithWrapper=function(src,wrapper,listener,opt_capt,opt_handler){wrapper.unlisten(src,listener,opt_capt,opt_handler)};
goog.events.cleanUp_=function(type,capture,srcUid,listenerArray){if(!listenerArray.locked_)if(listenerArray.needsCleanup_){for(var oldIndex=0,newIndex=0;oldIndex<listenerArray.length;oldIndex++){if(listenerArray[oldIndex].removed){var proxy=listenerArray[oldIndex].proxy;proxy.src=null;goog.events.pools.releaseProxy(proxy);goog.events.pools.releaseListener(listenerArray[oldIndex]);continue}if(oldIndex!=newIndex)listenerArray[newIndex]=listenerArray[oldIndex];newIndex++}listenerArray.length=newIndex;
listenerArray.needsCleanup_=false;if(newIndex==0){goog.events.pools.releaseArray(listenerArray);delete goog.events.listenerTree_[type][capture][srcUid];goog.events.listenerTree_[type][capture].count_--;if(goog.events.listenerTree_[type][capture].count_==0){goog.events.pools.releaseObject(goog.events.listenerTree_[type][capture]);delete goog.events.listenerTree_[type][capture];goog.events.listenerTree_[type].count_--}if(goog.events.listenerTree_[type].count_==0){goog.events.pools.releaseObject(goog.events.listenerTree_[type]);
delete goog.events.listenerTree_[type]}}}};
goog.events.removeAll=function(opt_obj,opt_type,opt_capt){var count=0;var noObj=opt_obj==null;var noType=opt_type==null;var noCapt=opt_capt==null;opt_capt=!!opt_capt;if(!noObj){var srcUid=goog.getUid(opt_obj);if(goog.events.sources_[srcUid]){var sourcesArray=goog.events.sources_[srcUid];for(var i=sourcesArray.length-1;i>=0;i--){var listener=sourcesArray[i];if((noType||opt_type==listener.type)&&(noCapt||opt_capt==listener.capture)){goog.events.unlistenByKey(listener.key);count++}}}}else goog.object.forEach(goog.events.sources_,
function(listeners){for(var i=listeners.length-1;i>=0;i--){var listener=listeners[i];if((noType||opt_type==listener.type)&&(noCapt||opt_capt==listener.capture)){goog.events.unlistenByKey(listener.key);count++}}});return count};goog.events.getListeners=function(obj,type,capture){return goog.events.getListeners_(obj,type,capture)||[]};
goog.events.getListeners_=function(obj,type,capture){var map=goog.events.listenerTree_;if(type in map){map=map[type];if(capture in map){map=map[capture];var objUid=goog.getUid(obj);if(map[objUid])return map[objUid]}}return null};
goog.events.getListener=function(src,type,listener,opt_capt,opt_handler){var capture=!!opt_capt;var listenerArray=goog.events.getListeners_(src,type,capture);if(listenerArray)for(var i=0;i<listenerArray.length;i++)if(listenerArray[i].listener==listener&&listenerArray[i].capture==capture&&listenerArray[i].handler==opt_handler)return listenerArray[i];return null};
goog.events.hasListener=function(obj,opt_type,opt_capture){var objUid=goog.getUid(obj);var listeners=goog.events.sources_[objUid];if(listeners){var hasType=goog.isDef(opt_type);var hasCapture=goog.isDef(opt_capture);if(hasType&&hasCapture){var map=goog.events.listenerTree_[opt_type];return!!map&&!!map[opt_capture]&&objUid in map[opt_capture]}else if(!(hasType||hasCapture))return true;else return goog.array.some(listeners,function(listener){return hasType&&listener.type==opt_type||hasCapture&&listener.capture==
opt_capture})}return false};goog.events.expose=function(e){var str=[];for(var key in e)if(e[key]&&e[key].id)str.push(key+" = "+e[key]+" ("+e[key].id+")");else str.push(key+" = "+e[key]);return str.join("\n")};
goog.events.EventType={CLICK:"click",DBLCLICK:"dblclick",MOUSEDOWN:"mousedown",MOUSEUP:"mouseup",MOUSEOVER:"mouseover",MOUSEOUT:"mouseout",MOUSEMOVE:"mousemove",SELECTSTART:"selectstart",KEYPRESS:"keypress",KEYDOWN:"keydown",KEYUP:"keyup",BLUR:"blur",FOCUS:"focus",DEACTIVATE:"deactivate",FOCUSIN:goog.userAgent.IE?"focusin":"DOMFocusIn",FOCUSOUT:goog.userAgent.IE?"focusout":"DOMFocusOut",CHANGE:"change",SELECT:"select",SUBMIT:"submit",CONTEXTMENU:"contextmenu",DRAGSTART:"dragstart",ERROR:"error",HASHCHANGE:"hashchange",
HELP:"help",LOAD:"load",LOSECAPTURE:"losecapture",READYSTATECHANGE:"readystatechange",RESIZE:"resize",SCROLL:"scroll",UNLOAD:"unload"};goog.events.getOnString_=function(type){if(type in goog.events.onStringMap_)return goog.events.onStringMap_[type];return goog.events.onStringMap_[type]=goog.events.onString_+type};
goog.events.fireListeners=function(obj,type,capture,eventObject){var map=goog.events.listenerTree_;if(type in map){map=map[type];if(capture in map)return goog.events.fireListeners_(map[capture],obj,type,capture,eventObject)}return true};
goog.events.fireListeners_=function(map,obj,type,capture,eventObject){var retval=1;var objUid=goog.getUid(obj);if(map[objUid]){map.remaining_--;var listenerArray=map[objUid];if(!listenerArray.locked_)listenerArray.locked_=1;else listenerArray.locked_++;try{var length=listenerArray.length;for(var i=0;i<length;i++){var listener=listenerArray[i];if(listener&&!listener.removed)retval&=goog.events.fireListener(listener,eventObject)!==false}}finally{listenerArray.locked_--;goog.events.cleanUp_(type,capture,
objUid,listenerArray)}}return Boolean(retval)};goog.events.fireListener=function(listener,eventObject){var rv=listener.handleEvent(eventObject);if(listener.callOnce)goog.events.unlistenByKey(listener.key);return rv};goog.events.getTotalListenerCount=function(){return goog.object.getCount(goog.events.listeners_)};
goog.events.dispatchEvent=function(src,e){if(goog.isString(e))e=new goog.events.Event(e,src);else if(!(e instanceof goog.events.Event)){var oldEvent=e;e=new goog.events.Event(e.type,src);goog.object.extend(e,oldEvent)}else e.target=e.target||src;var rv=1,ancestors;var type=e.type;var map=goog.events.listenerTree_;if(!(type in map))return true;map=map[type];var hasCapture=true in map;var targetsMap;if(hasCapture){ancestors=[];for(var parent=src;parent;parent=parent.getParentEventTarget())ancestors.push(parent);
targetsMap=map[true];targetsMap.remaining_=targetsMap.count_;for(var i=ancestors.length-1;!e.propagationStopped_&&i>=0&&targetsMap.remaining_;i--){e.currentTarget=ancestors[i];rv&=goog.events.fireListeners_(targetsMap,ancestors[i],e.type,true,e)&&e.returnValue_!=false}}var hasBubble=false in map;if(hasBubble){targetsMap=map[false];targetsMap.remaining_=targetsMap.count_;if(hasCapture)for(var i=0;!e.propagationStopped_&&i<ancestors.length&&targetsMap.remaining_;i++){e.currentTarget=ancestors[i];rv&=
goog.events.fireListeners_(targetsMap,ancestors[i],e.type,false,e)&&e.returnValue_!=false}else for(var current=src;!e.propagationStopped_&&current&&targetsMap.remaining_;current=current.getParentEventTarget()){e.currentTarget=current;rv&=goog.events.fireListeners_(targetsMap,current,e.type,false,e)&&e.returnValue_!=false}}return Boolean(rv)};
goog.events.protectBrowserEventEntryPoint=function(errorHandler,opt_tracers){goog.events.handleBrowserEvent_=errorHandler.protectEntryPoint(goog.events.handleBrowserEvent_,opt_tracers);goog.events.pools.setProxyCallbackFunction(goog.events.handleBrowserEvent_)};
goog.events.handleBrowserEvent_=function(key,opt_evt){if(!goog.events.listeners_[key])return true;var listener=goog.events.listeners_[key];var type=listener.type;var map=goog.events.listenerTree_;if(!(type in map))return true;map=map[type];var retval,targetsMap;if(goog.userAgent.IE){var ieEvent=opt_evt||goog.getObjectByName("window.event");var hasCapture=true in map;var hasBubble=false in map;if(hasCapture){if(goog.events.isMarkedIeEvent_(ieEvent))return true;goog.events.markIeEvent_(ieEvent)}var evt=
goog.events.pools.getEvent();evt.init(ieEvent,this);retval=true;try{if(hasCapture){var ancestors=goog.events.pools.getArray();for(var parent=evt.currentTarget;parent;parent=parent.parentNode)ancestors.push(parent);targetsMap=map[true];targetsMap.remaining_=targetsMap.count_;for(var i=ancestors.length-1;!evt.propagationStopped_&&i>=0&&targetsMap.remaining_;i--){evt.currentTarget=ancestors[i];retval&=goog.events.fireListeners_(targetsMap,ancestors[i],type,true,evt)}if(hasBubble){targetsMap=map[false];
targetsMap.remaining_=targetsMap.count_;for(var i=0;!evt.propagationStopped_&&i<ancestors.length&&targetsMap.remaining_;i++){evt.currentTarget=ancestors[i];retval&=goog.events.fireListeners_(targetsMap,ancestors[i],type,false,evt)}}}else retval=goog.events.fireListener(listener,evt)}finally{if(ancestors){ancestors.length=0;goog.events.pools.releaseArray(ancestors)}evt.dispose();goog.events.pools.releaseEvent(evt)}return retval}var be=new goog.events.BrowserEvent(opt_evt,this);try{retval=goog.events.fireListener(listener,
be)}finally{be.dispose()}return retval};goog.events.pools.setProxyCallbackFunction(goog.events.handleBrowserEvent_);goog.events.markIeEvent_=function(e){var useReturnValue=false;if(e.keyCode==0)try{e.keyCode=-1;return}catch(ex){useReturnValue=true}if(useReturnValue||e.returnValue==undefined)e.returnValue=true};goog.events.isMarkedIeEvent_=function(e){return e.keyCode<0||e.returnValue!=undefined};goog.events.uniqueIdCounter_=0;goog.events.getUniqueId=function(identifier){return identifier+"_"+goog.events.uniqueIdCounter_++};goog.provide("goog.events.EventTarget");goog.require("goog.Disposable");goog.require("goog.events");goog.events.EventTarget=function(){goog.Disposable.call(this)};goog.inherits(goog.events.EventTarget,goog.Disposable);goog.events.EventTarget.prototype.customEvent_=true;goog.events.EventTarget.prototype.parentEventTarget_=null;goog.events.EventTarget.prototype.getParentEventTarget=function(){return this.parentEventTarget_};
goog.events.EventTarget.prototype.setParentEventTarget=function(parent){this.parentEventTarget_=parent};goog.events.EventTarget.prototype.addEventListener=function(type,handler,opt_capture,opt_handlerScope){goog.events.listen(this,type,handler,opt_capture,opt_handlerScope)};goog.events.EventTarget.prototype.removeEventListener=function(type,handler,opt_capture,opt_handlerScope){goog.events.unlisten(this,type,handler,opt_capture,opt_handlerScope)};
goog.events.EventTarget.prototype.dispatchEvent=function(e){return goog.events.dispatchEvent(this,e)};goog.events.EventTarget.prototype.disposeInternal=function(){goog.events.EventTarget.superClass_.disposeInternal.call(this);goog.events.removeAll(this);this.parentEventTarget_=null};goog.provide("goog.structs");goog.require("goog.array");goog.require("goog.object");goog.structs.getCount=function(col){if(typeof col.getCount=="function")return col.getCount();if(goog.isArrayLike(col)||goog.isString(col))return col.length;return goog.object.getCount(col)};
goog.structs.getValues=function(col){if(typeof col.getValues=="function")return col.getValues();if(goog.isString(col))return col.split("");if(goog.isArrayLike(col)){var rv=[];var l=col.length;for(var i=0;i<l;i++)rv.push(col[i]);return rv}return goog.object.getValues(col)};
goog.structs.getKeys=function(col){if(typeof col.getKeys=="function")return col.getKeys();if(typeof col.getValues=="function")return undefined;if(goog.isArrayLike(col)||goog.isString(col)){var rv=[];var l=col.length;for(var i=0;i<l;i++)rv.push(i);return rv}return goog.object.getKeys(col)};
goog.structs.contains=function(col,val){if(typeof col.contains=="function")return col.contains(val);if(typeof col.containsValue=="function")return col.containsValue(val);if(goog.isArrayLike(col)||goog.isString(col))return goog.array.contains(col,val);return goog.object.containsValue(col,val)};goog.structs.isEmpty=function(col){if(typeof col.isEmpty=="function")return col.isEmpty();if(goog.isArrayLike(col)||goog.isString(col))return goog.array.isEmpty(col);return goog.object.isEmpty(col)};
goog.structs.clear=function(col){if(typeof col.clear=="function")col.clear();else if(goog.isArrayLike(col))goog.array.clear(col);else goog.object.clear(col)};
goog.structs.forEach=function(col,f,opt_obj){if(typeof col.forEach=="function")col.forEach(f,opt_obj);else if(goog.isArrayLike(col)||goog.isString(col))goog.array.forEach(col,f,opt_obj);else{var keys=goog.structs.getKeys(col);var values=goog.structs.getValues(col);var l=values.length;for(var i=0;i<l;i++)f.call(opt_obj,values[i],keys&&keys[i],col)}};
goog.structs.filter=function(col,f,opt_obj){if(typeof col.filter=="function")return col.filter(f,opt_obj);if(goog.isArrayLike(col)||goog.isString(col))return goog.array.filter(col,f,opt_obj);var rv;var keys=goog.structs.getKeys(col);var values=goog.structs.getValues(col);var l=values.length;if(keys){rv={};for(var i=0;i<l;i++)if(f.call(opt_obj,values[i],keys[i],col))rv[keys[i]]=values[i]}else{rv=[];for(var i=0;i<l;i++)if(f.call(opt_obj,values[i],undefined,col))rv.push(values[i])}return rv};
goog.structs.map=function(col,f,opt_obj){if(typeof col.map=="function")return col.map(f,opt_obj);if(goog.isArrayLike(col)||goog.isString(col))return goog.array.map(col,f,opt_obj);var rv;var keys=goog.structs.getKeys(col);var values=goog.structs.getValues(col);var l=values.length;if(keys){rv={};for(var i=0;i<l;i++)rv[keys[i]]=f.call(opt_obj,values[i],keys[i],col)}else{rv=[];for(var i=0;i<l;i++)rv[i]=f.call(opt_obj,values[i],undefined,col)}return rv};
goog.structs.some=function(col,f,opt_obj){if(typeof col.some=="function")return col.some(f,opt_obj);if(goog.isArrayLike(col)||goog.isString(col))return goog.array.some(col,f,opt_obj);var keys=goog.structs.getKeys(col);var values=goog.structs.getValues(col);var l=values.length;for(var i=0;i<l;i++)if(f.call(opt_obj,values[i],keys&&keys[i],col))return true;return false};
goog.structs.every=function(col,f,opt_obj){if(typeof col.every=="function")return col.every(f,opt_obj);if(goog.isArrayLike(col)||goog.isString(col))return goog.array.every(col,f,opt_obj);var keys=goog.structs.getKeys(col);var values=goog.structs.getValues(col);var l=values.length;for(var i=0;i<l;i++)if(!f.call(opt_obj,values[i],keys&&keys[i],col))return false;return true};goog.provide("goog.iter");goog.provide("goog.iter.Iterator");goog.provide("goog.iter.StopIteration");goog.require("goog.array");goog.iter.Iterable=goog.typedef;if("StopIteration"in goog.global)goog.iter.StopIteration=goog.global["StopIteration"];else goog.iter.StopIteration=Error("StopIteration");goog.iter.Iterator=function(){};goog.iter.Iterator.prototype.next=function(){throw goog.iter.StopIteration;};goog.iter.Iterator.prototype.__iterator__=function(opt_keys){return this};
goog.iter.toIterator=function(iterable){if(iterable instanceof goog.iter.Iterator)return iterable;if(typeof iterable.__iterator__=="function")return iterable.__iterator__(false);if(goog.isArrayLike(iterable)){var i=0;var newIter=new goog.iter.Iterator;newIter.next=function(){while(true){if(i>=iterable.length)throw goog.iter.StopIteration;if(!(i in iterable)){i++;continue}return iterable[i++]}};return newIter}throw Error("Not implemented");};
goog.iter.forEach=function(iterable,f,opt_obj){if(goog.isArrayLike(iterable))try{goog.array.forEach(iterable,f,opt_obj)}catch(ex){if(ex!==goog.iter.StopIteration)throw ex;}else{iterable=goog.iter.toIterator(iterable);try{while(true)f.call(opt_obj,iterable.next(),undefined,iterable)}catch(ex){if(ex!==goog.iter.StopIteration)throw ex;}}};
goog.iter.filter=function(iterable,f,opt_obj){iterable=goog.iter.toIterator(iterable);var newIter=new goog.iter.Iterator;newIter.next=function(){while(true){var val=iterable.next();if(f.call(opt_obj,val,undefined,iterable))return val}};return newIter};
goog.iter.range=function(startOrStop,opt_stop,opt_step){var start=0;var stop=startOrStop;var step=opt_step||1;if(arguments.length>1){start=startOrStop;stop=opt_stop}if(step==0)throw Error("Range step argument must not be zero");var newIter=new goog.iter.Iterator;newIter.next=function(){if(step>0&&start>=stop||step<0&&start<=stop)throw goog.iter.StopIteration;var rv=start;start+=step;return rv};return newIter};goog.iter.join=function(iterable,deliminator){return goog.iter.toArray(iterable).join(deliminator)};
goog.iter.map=function(iterable,f,opt_obj){iterable=goog.iter.toIterator(iterable);var newIter=new goog.iter.Iterator;newIter.next=function(){while(true){var val=iterable.next();return f.call(opt_obj,val,undefined,iterable)}};return newIter};goog.iter.reduce=function(iterable,f,val,opt_obj){var rval=val;goog.iter.forEach(iterable,function(val){rval=f.call(opt_obj,rval,val)});return rval};
goog.iter.some=function(iterable,f,opt_obj){iterable=goog.iter.toIterator(iterable);try{while(true)if(f.call(opt_obj,iterable.next(),undefined,iterable))return true}catch(ex){if(ex!==goog.iter.StopIteration)throw ex;}return false};goog.iter.every=function(iterable,f,opt_obj){iterable=goog.iter.toIterator(iterable);try{while(true)if(!f.call(opt_obj,iterable.next(),undefined,iterable))return false}catch(ex){if(ex!==goog.iter.StopIteration)throw ex;}return true};
goog.iter.chain=function(var_args){var args=arguments;var length=args.length;var i=0;var newIter=new goog.iter.Iterator;newIter.next=function(){try{if(i>=length)throw goog.iter.StopIteration;var current=goog.iter.toIterator(args[i]);return current.next()}catch(ex){if(ex!==goog.iter.StopIteration||i>=length)throw ex;else{i++;return this.next()}}};return newIter};
goog.iter.dropWhile=function(iterable,f,opt_obj){iterable=goog.iter.toIterator(iterable);var newIter=new goog.iter.Iterator;var dropping=true;newIter.next=function(){while(true){var val=iterable.next();if(dropping&&f.call(opt_obj,val,undefined,iterable))continue;else dropping=false;return val}};return newIter};
goog.iter.takeWhile=function(iterable,f,opt_obj){iterable=goog.iter.toIterator(iterable);var newIter=new goog.iter.Iterator;var taking=true;newIter.next=function(){while(true)if(taking){var val=iterable.next();if(f.call(opt_obj,val,undefined,iterable))return val;else taking=false}else throw goog.iter.StopIteration;};return newIter};
goog.iter.toArray=function(iterable){if(goog.isArrayLike(iterable))return goog.array.toArray(iterable);iterable=goog.iter.toIterator(iterable);var array=[];goog.iter.forEach(iterable,function(val){array.push(val)});return array};
goog.iter.equals=function(iterable1,iterable2){iterable1=goog.iter.toIterator(iterable1);iterable2=goog.iter.toIterator(iterable2);var b1,b2;try{while(true){b1=b2=false;var val1=iterable1.next();b1=true;var val2=iterable2.next();b2=true;if(val1!=val2)return false}}catch(ex){if(ex!==goog.iter.StopIteration)throw ex;else{if(b1&&!b2)return false;if(!b2)try{val2=iterable2.next();return false}catch(ex1){if(ex1!==goog.iter.StopIteration)throw ex1;return true}}}return false};
goog.iter.nextOrValue=function(iterable,defaultValue){try{return goog.iter.toIterator(iterable).next()}catch(e){if(e!=goog.iter.StopIteration)throw e;return defaultValue}};goog.provide("goog.structs.Map");goog.require("goog.iter.Iterator");goog.require("goog.iter.StopIteration");goog.require("goog.object");goog.require("goog.structs");goog.structs.Map=function(opt_map,var_args){this.map_={};this.keys_=[];var argLength=arguments.length;if(argLength>1){if(argLength%2)throw Error("Uneven number of arguments");for(var i=0;i<argLength;i+=2)this.set(arguments[i],arguments[i+1])}else if(opt_map)this.addAll(opt_map)};goog.structs.Map.prototype.count_=0;
goog.structs.Map.prototype.version_=0;goog.structs.Map.prototype.getCount=function(){return this.count_};goog.structs.Map.prototype.getValues=function(){this.cleanupKeysArray_();var rv=[];for(var i=0;i<this.keys_.length;i++){var key=this.keys_[i];rv.push(this.map_[key])}return rv};goog.structs.Map.prototype.getKeys=function(){this.cleanupKeysArray_();return this.keys_.concat()};goog.structs.Map.prototype.containsKey=function(key){return goog.structs.Map.hasKey_(this.map_,key)};
goog.structs.Map.prototype.containsValue=function(val){for(var i=0;i<this.keys_.length;i++){var key=this.keys_[i];if(goog.structs.Map.hasKey_(this.map_,key)&&this.map_[key]==val)return true}return false};
goog.structs.Map.prototype.equals=function(otherMap,opt_equalityFn){if(this===otherMap)return true;if(this.count_!=otherMap.getCount())return false;var equalityFn=opt_equalityFn||goog.structs.Map.defaultEquals;this.cleanupKeysArray_();for(var key,i=0;key=this.keys_[i];i++)if(!equalityFn(this.get(key),otherMap.get(key)))return false;return true};goog.structs.Map.defaultEquals=function(a,b){return a===b};goog.structs.Map.prototype.isEmpty=function(){return this.count_==0};
goog.structs.Map.prototype.clear=function(){this.map_={};this.keys_.length=0;this.count_=0;this.version_=0};goog.structs.Map.prototype.remove=function(key){if(goog.structs.Map.hasKey_(this.map_,key)){delete this.map_[key];this.count_--;this.version_++;if(this.keys_.length>2*this.count_)this.cleanupKeysArray_();return true}return false};
goog.structs.Map.prototype.cleanupKeysArray_=function(){if(this.count_!=this.keys_.length){var srcIndex=0;var destIndex=0;while(srcIndex<this.keys_.length){var key=this.keys_[srcIndex];if(goog.structs.Map.hasKey_(this.map_,key))this.keys_[destIndex++]=key;srcIndex++}this.keys_.length=destIndex}if(this.count_!=this.keys_.length){var seen={};var srcIndex=0;var destIndex=0;while(srcIndex<this.keys_.length){var key=this.keys_[srcIndex];if(!goog.structs.Map.hasKey_(seen,key)){this.keys_[destIndex++]=key;
seen[key]=1}srcIndex++}this.keys_.length=destIndex}};goog.structs.Map.prototype.get=function(key,opt_val){if(goog.structs.Map.hasKey_(this.map_,key))return this.map_[key];return opt_val};goog.structs.Map.prototype.set=function(key,value){if(!goog.structs.Map.hasKey_(this.map_,key)){this.count_++;this.keys_.push(key);this.version_++}this.map_[key]=value};
goog.structs.Map.prototype.addAll=function(map){var keys,values;if(map instanceof goog.structs.Map){keys=map.getKeys();values=map.getValues()}else{keys=goog.object.getKeys(map);values=goog.object.getValues(map)}for(var i=0;i<keys.length;i++)this.set(keys[i],values[i])};goog.structs.Map.prototype.clone=function(){return new goog.structs.Map(this)};
goog.structs.Map.prototype.transpose=function(){var transposed=new goog.structs.Map;for(var i=0;i<this.keys_.length;i++){var key=this.keys_[i];var value=this.map_[key];transposed.set(value,key)}return transposed};goog.structs.Map.prototype.getKeyIterator=function(){return this.__iterator__(true)};goog.structs.Map.prototype.getValueIterator=function(){return this.__iterator__(false)};
goog.structs.Map.prototype.__iterator__=function(opt_keys){this.cleanupKeysArray_();var i=0;var keys=this.keys_;var map=this.map_;var version=this.version_;var selfObj=this;var newIter=new goog.iter.Iterator;newIter.next=function(){while(true){if(version!=selfObj.version_)throw Error("The map has changed since the iterator was created");if(i>=keys.length)throw goog.iter.StopIteration;var key=keys[i++];return opt_keys?key:map[key]}};return newIter};
goog.structs.Map.hasKey_=function(obj,key){return Object.prototype.hasOwnProperty.call(obj,key)};goog.provide("goog.structs.Set");goog.require("goog.structs");goog.require("goog.structs.Map");goog.structs.Set=function(opt_values){this.map_=new goog.structs.Map;if(opt_values)this.addAll(opt_values)};goog.structs.Set.getKey_=function(val){var type=typeof val;if(type=="object"&&val||type=="function")return"o"+goog.getUid(val);else return type.substr(0,1)+val};goog.structs.Set.prototype.getCount=function(){return this.map_.getCount()};
goog.structs.Set.prototype.add=function(element){this.map_.set(goog.structs.Set.getKey_(element),element)};goog.structs.Set.prototype.addAll=function(col){var values=goog.structs.getValues(col);var l=values.length;for(var i=0;i<l;i++)this.add(values[i])};goog.structs.Set.prototype.removeAll=function(col){var values=goog.structs.getValues(col);var l=values.length;for(var i=0;i<l;i++)this.remove(values[i])};goog.structs.Set.prototype.remove=function(element){return this.map_.remove(goog.structs.Set.getKey_(element))};
goog.structs.Set.prototype.clear=function(){this.map_.clear()};goog.structs.Set.prototype.isEmpty=function(){return this.map_.isEmpty()};goog.structs.Set.prototype.contains=function(element){return this.map_.containsKey(goog.structs.Set.getKey_(element))};goog.structs.Set.prototype.containsAll=function(col){return goog.structs.every(col,this.contains,this)};
goog.structs.Set.prototype.intersection=function(col){var result=new goog.structs.Set;var values=goog.structs.getValues(col);for(var i=0;i<values.length;i++){var value=values[i];if(this.contains(value))result.add(value)}return result};goog.structs.Set.prototype.getValues=function(){return this.map_.getValues()};goog.structs.Set.prototype.clone=function(){return new goog.structs.Set(this)};goog.structs.Set.prototype.equals=function(col){return this.getCount()==goog.structs.getCount(col)&&this.isSubsetOf(col)};
goog.structs.Set.prototype.isSubsetOf=function(col){var colCount=goog.structs.getCount(col);if(this.getCount()>colCount)return false;if(!(col instanceof goog.structs.Set)&&colCount>5)col=new goog.structs.Set(col);return goog.structs.every(this,function(value){return goog.structs.contains(col,value)})};goog.structs.Set.prototype.__iterator__=function(opt_keys){return this.map_.__iterator__(false)};goog.provide("goog.debug");goog.require("goog.array");goog.require("goog.string");goog.require("goog.structs.Set");goog.debug.catchErrors=function(logFunc,opt_cancel,opt_target){var target=opt_target||goog.global;var oldErrorHandler=target.onerror;target.onerror=function(message,url,line){if(oldErrorHandler)oldErrorHandler(message,url,line);var file=String(url).split(/[\/\\]/).pop();logFunc({message:message,fileName:file,line:line});return Boolean(opt_cancel)}};
goog.debug.expose=function(obj,opt_showFn){if(typeof obj=="undefined")return"undefined";if(obj==null)return"NULL";var str=[];for(var x in obj){if(!opt_showFn&&goog.isFunction(obj[x]))continue;var s=x+" = ";try{s+=obj[x]}catch(e){s+="*** "+e+" ***"}str.push(s)}return str.join("\n")};
goog.debug.deepExpose=function(obj,opt_showFn){var previous=new goog.structs.Set;var str=[];var helper=function(obj,space){var nestspace=space+" ";var indentMultiline=function(str){return str.replace(/\n/g,"\n"+space)};try{if(!goog.isDef(obj))str.push("undefined");else if(goog.isNull(obj))str.push("NULL");else if(goog.isString(obj))str.push('"'+indentMultiline(obj)+'"');else if(goog.isFunction(obj))str.push(indentMultiline(String(obj)));else if(goog.isObject(obj))if(previous.contains(obj))str.push("*** reference loop detected ***");
else{previous.add(obj);str.push("{");for(var x in obj){if(!opt_showFn&&goog.isFunction(obj[x]))continue;str.push("\n");str.push(nestspace);str.push(x+" = ");helper(obj[x],nestspace)}str.push("\n"+space+"}")}else str.push(obj)}catch(e){str.push("*** "+e+" ***")}};helper(obj,"");return str.join("")};goog.debug.exposeArray=function(arr){var str=[];for(var i=0;i<arr.length;i++)if(goog.isArray(arr[i]))str.push(goog.debug.exposeArray(arr[i]));else str.push(arr[i]);return"[ "+str.join(", ")+" ]"};
goog.debug.exposeException=function(err,opt_fn){try{var e=goog.debug.normalizeErrorObject(err);var error="Message: "+goog.string.htmlEscape(e.message)+'\nUrl: <a href="view-source:'+e.fileName+'" target="_new">'+e.fileName+"</a>\nLine: "+e.lineNumber+"\n\nBrowser stack:\n"+goog.string.htmlEscape(e.stack+"-> ")+"[end]\n\nJS stack traversal:\n"+goog.string.htmlEscape(goog.debug.getStacktrace(opt_fn)+"-> ");return error}catch(e2){return"Exception trying to expose exception! You win, we lose. "+e2}};
goog.debug.normalizeErrorObject=function(err){var href=goog.getObjectByName("window.location.href");return typeof err=="string"?{message:err,name:"Unknown error",lineNumber:"Not available",fileName:href,stack:"Not available"}:!err.lineNumber||!err.fileName||!err.stack?{message:err.message,name:err.name,lineNumber:err.lineNumber||err.line||"Not available",fileName:err.fileName||err.filename||err.sourceURL||href,stack:err.stack||"Not available"}:err};
goog.debug.enhanceError=function(err,opt_message){var error=typeof err=="string"?Error(err):err;if(!error.stack)error.stack=goog.debug.getStacktrace(arguments.callee.caller);if(opt_message){var x=0;while(error["message"+x])++x;error["message"+x]=String(opt_message)}return error};
goog.debug.getStacktraceSimple=function(opt_depth){var sb=[];var fn=arguments.callee.caller;var depth=0;while(fn&&(!opt_depth||depth<opt_depth)){sb.push(goog.debug.getFunctionName(fn));sb.push("()\n");try{fn=fn.caller}catch(e){sb.push("[exception trying to get caller]\n");break}depth++;if(depth>=goog.debug.MAX_STACK_DEPTH){sb.push("[...long stack...]");break}}if(opt_depth&&depth>=opt_depth)sb.push("[...reached max depth limit...]");else sb.push("[end]");return sb.join("")};
goog.debug.MAX_STACK_DEPTH=50;goog.debug.getStacktrace=function(opt_fn){return goog.debug.getStacktraceHelper_(opt_fn||arguments.callee.caller,[])};
goog.debug.getStacktraceHelper_=function(fn,visited){var sb=[];if(goog.array.contains(visited,fn))sb.push("[...circular reference...]");else if(fn&&visited.length<goog.debug.MAX_STACK_DEPTH){sb.push(goog.debug.getFunctionName(fn)+"(");var args=fn.arguments;for(var i=0;i<args.length;i++){if(i>0)sb.push(", ");var argDesc;var arg=args[i];switch(typeof arg){case "object":argDesc=arg?"object":"null";break;case "string":argDesc=arg;break;case "number":argDesc=String(arg);break;case "boolean":argDesc=arg?
"true":"false";break;case "function":argDesc=goog.debug.getFunctionName(arg);argDesc=argDesc?argDesc:"[fn]";break;case "undefined":default:argDesc=typeof arg;break}if(argDesc.length>40)argDesc=argDesc.substr(0,40)+"...";sb.push(argDesc)}visited.push(fn);sb.push(")\n");try{sb.push(goog.debug.getStacktraceHelper_(fn.caller,visited))}catch(e){sb.push("[exception trying to get caller]\n")}}else if(fn)sb.push("[...long stack...]");else sb.push("[end]");return sb.join("")};
goog.debug.getFunctionName=function(fn){var functionSource=String(fn);if(!goog.debug.fnNameCache_[functionSource]){var matches=/function ([^\(]+)/.exec(functionSource);if(matches){var method=matches[1];goog.debug.fnNameCache_[functionSource]=method}else goog.debug.fnNameCache_[functionSource]="[Anonymous]"}return goog.debug.fnNameCache_[functionSource]};
goog.debug.makeWhitespaceVisible=function(string){return string.replace(/ /g,"[_]").replace(/\f/g,"[f]").replace(/\n/g,"[n]\n").replace(/\r/g,"[r]").replace(/\t/g,"[t]")};goog.debug.fnNameCache_={};goog.provide("goog.debug.LogRecord");goog.debug.LogRecord=function(level,msg,loggerName,opt_time,opt_sequenceNumber){this.sequenceNumber_=typeof opt_sequenceNumber=="number"?opt_sequenceNumber:goog.debug.LogRecord.nextSequenceNumber_++;this.time_=opt_time||goog.now();this.level_=level;this.msg_=msg;this.loggerName_=loggerName};goog.debug.LogRecord.prototype.exception_=null;goog.debug.LogRecord.prototype.exceptionText_=null;goog.debug.LogRecord.nextSequenceNumber_=0;
goog.debug.LogRecord.prototype.getLoggerName=function(){return this.loggerName_};goog.debug.LogRecord.prototype.getException=function(){return this.exception_};goog.debug.LogRecord.prototype.setException=function(exception){this.exception_=exception};goog.debug.LogRecord.prototype.getExceptionText=function(){return this.exceptionText_};goog.debug.LogRecord.prototype.setExceptionText=function(text){this.exceptionText_=text};
goog.debug.LogRecord.prototype.setLoggerName=function(loggerName){this.loggerName_=loggerName};goog.debug.LogRecord.prototype.getLevel=function(){return this.level_};goog.debug.LogRecord.prototype.setLevel=function(level){this.level_=level};goog.debug.LogRecord.prototype.getMessage=function(){return this.msg_};goog.debug.LogRecord.prototype.setMessage=function(msg){this.msg_=msg};goog.debug.LogRecord.prototype.getMillis=function(){return this.time_};
goog.debug.LogRecord.prototype.setMillis=function(time){this.time_=time};goog.debug.LogRecord.prototype.getSequenceNumber=function(){return this.sequenceNumber_};goog.provide("goog.debug.LogManager");goog.provide("goog.debug.Logger");goog.provide("goog.debug.Logger.Level");goog.require("goog.array");goog.require("goog.debug");goog.require("goog.debug.LogRecord");goog.debug.Logger=function(name){this.name_=name};goog.debug.Logger.prototype.parent_=null;goog.debug.Logger.prototype.level_=null;goog.debug.Logger.prototype.children_=null;goog.debug.Logger.prototype.handlers_=null;goog.debug.Logger.Level=function(name,value){this.name=name;this.value=value};
goog.debug.Logger.Level.prototype.toString=function(){return this.name};goog.debug.Logger.Level.OFF=new goog.debug.Logger.Level("OFF",Infinity);goog.debug.Logger.Level.SHOUT=new goog.debug.Logger.Level("SHOUT",1200);goog.debug.Logger.Level.SEVERE=new goog.debug.Logger.Level("SEVERE",1E3);goog.debug.Logger.Level.WARNING=new goog.debug.Logger.Level("WARNING",900);goog.debug.Logger.Level.INFO=new goog.debug.Logger.Level("INFO",800);
goog.debug.Logger.Level.CONFIG=new goog.debug.Logger.Level("CONFIG",700);goog.debug.Logger.Level.FINE=new goog.debug.Logger.Level("FINE",500);goog.debug.Logger.Level.FINER=new goog.debug.Logger.Level("FINER",400);goog.debug.Logger.Level.FINEST=new goog.debug.Logger.Level("FINEST",300);goog.debug.Logger.Level.ALL=new goog.debug.Logger.Level("ALL",0);
goog.debug.Logger.Level.PREDEFINED_LEVELS=[goog.debug.Logger.Level.OFF,goog.debug.Logger.Level.SHOUT,goog.debug.Logger.Level.SEVERE,goog.debug.Logger.Level.WARNING,goog.debug.Logger.Level.INFO,goog.debug.Logger.Level.CONFIG,goog.debug.Logger.Level.FINE,goog.debug.Logger.Level.FINER,goog.debug.Logger.Level.FINEST,goog.debug.Logger.Level.ALL];goog.debug.Logger.Level.predefinedLevelsCache_=null;
goog.debug.Logger.Level.createPredefinedLevelsCache_=function(){goog.debug.Logger.Level.predefinedLevelsCache_={};for(var i=0,level;level=goog.debug.Logger.Level.PREDEFINED_LEVELS[i];i++){goog.debug.Logger.Level.predefinedLevelsCache_[level.value]=level;goog.debug.Logger.Level.predefinedLevelsCache_[level.name]=level}};
goog.debug.Logger.Level.getPredefinedLevel=function(name){if(!goog.debug.Logger.Level.predefinedLevelsCache_)goog.debug.Logger.Level.createPredefinedLevelsCache_();return goog.debug.Logger.Level.predefinedLevelsCache_[name]||null};
goog.debug.Logger.Level.getPredefinedLevelByValue=function(value){if(!goog.debug.Logger.Level.predefinedLevelsCache_)goog.debug.Logger.Level.createPredefinedLevelsCache_();if(value in goog.debug.Logger.Level.predefinedLevelsCache_)return goog.debug.Logger.Level.predefinedLevelsCache_[value];for(var i=0;i<goog.debug.Logger.Level.PREDEFINED_LEVELS.length;++i){var level=goog.debug.Logger.Level.PREDEFINED_LEVELS[i];if(level.value<=value)return level}return null};goog.debug.Logger.getLogger=function(name){return goog.debug.LogManager.getLogger(name)};
goog.debug.Logger.prototype.getName=function(){return this.name_};goog.debug.Logger.prototype.addHandler=function(handler){if(!this.handlers_)this.handlers_=[];this.handlers_.push(handler)};goog.debug.Logger.prototype.removeHandler=function(handler){return!!this.handlers_&&goog.array.remove(this.handlers_,handler)};goog.debug.Logger.prototype.getParent=function(){return this.parent_};goog.debug.Logger.prototype.getChildren=function(){if(!this.children_)this.children_={};return this.children_};
goog.debug.Logger.prototype.setLevel=function(level){this.level_=level};goog.debug.Logger.prototype.getLevel=function(){return this.level_};goog.debug.Logger.prototype.getEffectiveLevel=function(){if(this.level_)return this.level_;if(this.parent_)return this.parent_.getEffectiveLevel();return null};goog.debug.Logger.prototype.isLoggable=function(level){if(this.level_)return level.value>=this.level_.value;if(this.parent_)return this.parent_.isLoggable(level);return false};
goog.debug.Logger.prototype.log=function(level,msg,opt_exception){if(this.isLoggable(level))this.doLogRecord_(this.getLogRecord(level,msg,opt_exception))};goog.debug.Logger.prototype.getLogRecord=function(level,msg,opt_exception){var logRecord=new goog.debug.LogRecord(level,String(msg),this.name_);if(opt_exception){logRecord.setException(opt_exception);logRecord.setExceptionText(goog.debug.exposeException(opt_exception,arguments.callee.caller))}return logRecord};
goog.debug.Logger.prototype.shout=function(msg,opt_exception){this.log(goog.debug.Logger.Level.SHOUT,msg,opt_exception)};goog.debug.Logger.prototype.severe=function(msg,opt_exception){this.log(goog.debug.Logger.Level.SEVERE,msg,opt_exception)};goog.debug.Logger.prototype.warning=function(msg,opt_exception){this.log(goog.debug.Logger.Level.WARNING,msg,opt_exception)};goog.debug.Logger.prototype.info=function(msg,opt_exception){this.log(goog.debug.Logger.Level.INFO,msg,opt_exception)};
goog.debug.Logger.prototype.config=function(msg,opt_exception){this.log(goog.debug.Logger.Level.CONFIG,msg,opt_exception)};goog.debug.Logger.prototype.fine=function(msg,opt_exception){this.log(goog.debug.Logger.Level.FINE,msg,opt_exception)};goog.debug.Logger.prototype.finer=function(msg,opt_exception){this.log(goog.debug.Logger.Level.FINER,msg,opt_exception)};goog.debug.Logger.prototype.finest=function(msg,opt_exception){this.log(goog.debug.Logger.Level.FINEST,msg,opt_exception)};
goog.debug.Logger.prototype.logRecord=function(logRecord){if(this.isLoggable(logRecord.getLevel()))this.doLogRecord_(logRecord)};goog.debug.Logger.prototype.doLogRecord_=function(logRecord){var target=this;while(target){target.callPublish_(logRecord);target=target.getParent()}};goog.debug.Logger.prototype.callPublish_=function(logRecord){if(this.handlers_)for(var i=0,handler;handler=this.handlers_[i];i++)handler(logRecord)};goog.debug.Logger.prototype.setParent_=function(parent){this.parent_=parent};
goog.debug.Logger.prototype.addChild_=function(name,logger){this.getChildren()[name]=logger};goog.debug.LogManager={};goog.debug.LogManager.loggers_={};goog.debug.LogManager.rootLogger_=null;goog.debug.LogManager.initialize=function(){if(!goog.debug.LogManager.rootLogger_){goog.debug.LogManager.rootLogger_=new goog.debug.Logger("");goog.debug.LogManager.loggers_[""]=goog.debug.LogManager.rootLogger_;goog.debug.LogManager.rootLogger_.setLevel(goog.debug.Logger.Level.CONFIG)}};
goog.debug.LogManager.getLoggers=function(){return goog.debug.LogManager.loggers_};goog.debug.LogManager.getRoot=function(){goog.debug.LogManager.initialize();return goog.debug.LogManager.rootLogger_};goog.debug.LogManager.getLogger=function(name){goog.debug.LogManager.initialize();var ret=goog.debug.LogManager.loggers_[name];return ret||goog.debug.LogManager.createLogger_(name)};
goog.debug.LogManager.createFunctionForCatchErrors=function(opt_logger){return function(info){var logger=opt_logger||goog.debug.LogManager.getRoot();logger.severe("Error: "+info.message+" ("+info.fileName+" @ Line: "+info.line+")")}};
goog.debug.LogManager.createLogger_=function(name){var logger=new goog.debug.Logger(name);var lastDotIndex=name.lastIndexOf(".");var parentName=name.substr(0,lastDotIndex);var leafName=name.substr(lastDotIndex+1);var parentLogger=goog.debug.LogManager.getLogger(parentName);parentLogger.addChild_(leafName,logger);logger.setParent_(parentLogger);goog.debug.LogManager.loggers_[name]=logger;return logger};goog.provide("kemia.controller.ReactionController");goog.require("goog.events.EventTarget");goog.require("goog.debug.Logger");kemia.controller.ReactionController=function(parentController){goog.events.EventTarget.call(this);this.setParentEventTarget(parentController)};goog.inherits(kemia.controller.ReactionController,goog.events.EventTarget);kemia.controller.ReactionController.prototype.handleMouseOver=function(Reaction,e){this.dispatchEvent(kemia.controller.ReactionController.EventType.MOUSEOVER)};
kemia.controller.ReactionController.prototype.handleMouseOut=function(Reaction,e){this.dispatchEvent(kemia.controller.ReactionController.EventType.MOUSEOUT)};kemia.controller.ReactionController.EventType={MOUSEOVER:"reaction_mouseover",MOUSEOUT:"reaction_mouseout"};kemia.controller.ReactionController.prototype.logger=goog.debug.Logger.getLogger("kemia.controller.ReactionController");goog.provide("kemia.view.Renderer");goog.require("goog.structs.Map");goog.require("goog.debug.Logger");kemia.view.Renderer=function(controller,graphics,opt_config,defaultConfig){this.controller=controller;this.graphics=graphics;this.config=new goog.structs.Map(defaultConfig);if(opt_config)this.config.addAll(opt_config)};kemia.view.Renderer.prototype.render=goog.abstractMethod;kemia.view.Renderer.prototype.logger=goog.debug.Logger.getLogger("kemia.view.Renderer");
kemia.view.Renderer.prototype.buildTransform=function(fromBox){var size=goog.math.Rect.createFromBox(fromBox).getSize();var fromWidth=size.width;size.scaleToFit(this.graphics.getSize());var toWidth=size.width;var scale=this.scale_factor*toWidth/fromWidth;var top=Math.max(fromBox.top,fromBox.bottom);var left=Math.min(fromBox.left,fromBox.right);var transform=new kemia.graphics.AffineTransform(scale,0,0,-scale,-left*scale,top*scale);return transform};goog.provide("kemia.controller.MoleculeController");goog.require("goog.events.EventTarget");goog.require("goog.debug.Logger");kemia.controller.MoleculeController=function(parentController){goog.events.EventTarget.call(this);this.setParentEventTarget(parentController)};goog.inherits(kemia.controller.MoleculeController,goog.events.EventTarget);
kemia.controller.MoleculeController.prototype.handleMouseOver=function(molecule,e){this.dispatchEvent(new kemia.controller.MoleculeController.MoleculeEvent(this,molecule,kemia.controller.MoleculeController.EventType.MOUSEOVER))};kemia.controller.MoleculeController.prototype.handleMouseOut=function(molecule,e){this.dispatchEvent(new kemia.controller.MoleculeController.MoleculeEvent(this,molecule,kemia.controller.MoleculeController.EventType.MOUSEOUT))};
kemia.controller.MoleculeController.prototype.handleMouseDown=function(molecule,e){this.dispatchEvent(new kemia.controller.MoleculeController.MoleculeEvent(this,molecule,kemia.controller.MoleculeController.EventType.MOUSEDOWN))};kemia.controller.MoleculeController.EventType={MOUSEOVER:"molecule_mouseover",MOUSEOUT:"molecule_mouseout",MOUSEDOWN:"molecule_mousedown"};
kemia.controller.MoleculeController.MoleculeEvent=function(controller,molecule,type){goog.events.Event.call(this,type,controller);this.molecule=molecule};kemia.controller.MoleculeController.prototype.logger=goog.debug.Logger.getLogger("kemia.controller.MoleculeController");goog.provide("kemia.controller.ArrowController");goog.provide("kemia.controller.ArrowController.ArrowEvent");goog.require("goog.events.EventTarget");goog.require("goog.debug.Logger");kemia.controller.ArrowController=function(parentController){goog.events.EventTarget.call(this);this.setParentEventTarget(parentController)};goog.inherits(kemia.controller.ArrowController,goog.events.EventTarget);kemia.controller.ArrowController.prototype.logger=goog.debug.Logger.getLogger("kemia.controller.ArrowController");
kemia.controller.ArrowController.prototype.handleMouseOver=function(coord,e){this.dispatchEvent(new kemia.controller.ArrowController.ArrowEvent(this,coord,e.currentTarget,kemia.controller.ArrowController.EventType.MOUSEOVER))};kemia.controller.ArrowController.prototype.handleMouseOut=function(coord,e){this.dispatchEvent(new kemia.controller.ArrowController.ArrowEvent(this,coord,e.currentTarget,kemia.controller.ArrowController.EventType.MOUSEOUT))};
kemia.controller.ArrowController.prototype.handleMouseDown=function(coord,e){this.dispatchEvent(new kemia.controller.ArrowController.ArrowEvent(this,coord,e,kemia.controller.ArrowController.EventType.MOUSEDOWN))};kemia.controller.ArrowController.EventType={MOUSEOVER:"arrow_mouseover",MOUSEOUT:"arrow_mouseout",MOUSEDOWN:"arrow_mousedown"};kemia.controller.ArrowController.ArrowEvent=function(controller,coord,group,type){goog.events.Event.call(this,type,controller);this.coord=coord;this.group=group};
goog.inherits(kemia.controller.ArrowController.ArrowEvent,goog.events.Event);goog.provide("kemia.controller.PlusController");goog.provide("kemia.controller.PlusController.PlusEvent");goog.require("goog.events.EventTarget");goog.require("goog.debug.Logger");kemia.controller.PlusController=function(parentController){goog.events.EventTarget.call(this);this.setParentEventTarget(parentController)};goog.inherits(kemia.controller.PlusController,goog.events.EventTarget);kemia.controller.PlusController.prototype.logger=goog.debug.Logger.getLogger("kemia.controller.PlusController");
kemia.controller.PlusController.prototype.handleMouseOver=function(coord,e){this.dispatchEvent(new kemia.controller.PlusController.PlusEvent(this,coord,kemia.controller.PlusController.EventType.MOUSEOVER))};kemia.controller.PlusController.prototype.handleMouseOut=function(coord,e){this.dispatchEvent(new kemia.controller.PlusController.PlusEvent(this,coord,kemia.controller.PlusController.EventType.MOUSEOUT))};
kemia.controller.PlusController.prototype.handleMouseDown=function(coord,e){this.logger.info("handleMouseDown");e.stopPropagation();this.dispatchEvent(new kemia.controller.PlusController.PlusEvent(this,coord,kemia.controller.PlusController.EventType.MOUSEDOWN))};kemia.controller.PlusController.EventType={MOUSEOVER:"plus_mouseover",MOUSEOUT:"plus_mouseout",MOUSEDOWN:"plus_mousedown"};
kemia.controller.PlusController.PlusEvent=function(controller,coord,type){goog.events.Event.call(this,type,controller);this.coord=coord};goog.inherits(kemia.controller.PlusController.PlusEvent,goog.events.Event);goog.provide("kemia.controller.BondController");goog.provide("kemia.controller.BondController.BondEvent");goog.require("goog.events.EventTarget");goog.require("goog.debug.Logger");kemia.controller.BondController=function(parentController){goog.events.EventTarget.call(this);this.setParentEventTarget(parentController)};goog.inherits(kemia.controller.BondController,goog.events.EventTarget);kemia.controller.BondController.prototype.logger=goog.debug.Logger.getLogger("kemia.controller.BondController");
kemia.controller.BondController.prototype.handleMouseOver=function(bond,e){this.dispatchEvent(new kemia.controller.BondController.BondEvent(this,bond,kemia.controller.BondController.EventType.MOUSEOVER))};kemia.controller.BondController.prototype.handleMouseOut=function(bond,e){this.dispatchEvent(new kemia.controller.BondController.BondEvent(this,bond,kemia.controller.BondController.EventType.MOUSEOUT))};
kemia.controller.BondController.prototype.handleMouseDown=function(bond,e){this.dispatchEvent(new kemia.controller.BondController.BondEvent(this,bond,kemia.controller.BondController.EventType.MOUSEDOWN))};kemia.controller.BondController.EventType={MOUSEOVER:"bond_mouseover",MOUSEOUT:"bond_mouseout",MOUSEDOWN:"bond_mousedown"};kemia.controller.BondController.BondEvent=function(controller,bond,type){goog.events.Event.call(this,type,controller);this.bond=bond};
goog.inherits(kemia.controller.BondController.BondEvent,goog.events.Event);goog.provide("goog.math.Coordinate");goog.math.Coordinate=function(opt_x,opt_y){this.x=goog.isDef(opt_x)?opt_x:0;this.y=goog.isDef(opt_y)?opt_y:0};goog.math.Coordinate.prototype.clone=function(){return new goog.math.Coordinate(this.x,this.y)};if(goog.DEBUG)goog.math.Coordinate.prototype.toString=function(){return"("+this.x+", "+this.y+")"};goog.math.Coordinate.equals=function(a,b){if(a==b)return true;if(!a||!b)return false;return a.x==b.x&&a.y==b.y};
goog.math.Coordinate.distance=function(a,b){var dx=a.x-b.x;var dy=a.y-b.y;return Math.sqrt(dx*dx+dy*dy)};goog.math.Coordinate.squaredDistance=function(a,b){var dx=a.x-b.x;var dy=a.y-b.y;return dx*dx+dy*dy};goog.math.Coordinate.difference=function(a,b){return new goog.math.Coordinate(a.x-b.x,a.y-b.y)};goog.math.Coordinate.sum=function(a,b){return new goog.math.Coordinate(a.x+b.x,a.y+b.y)};goog.provide("goog.math.Box");goog.require("goog.math.Coordinate");goog.math.Box=function(top,right,bottom,left){this.top=top;this.right=right;this.bottom=bottom;this.left=left};
goog.math.Box.boundingBox=function(var_args){var box=new goog.math.Box(arguments[0].y,arguments[0].x,arguments[0].y,arguments[0].x);for(var i=1;i<arguments.length;i++){var coord=arguments[i];box.top=Math.min(box.top,coord.y);box.right=Math.max(box.right,coord.x);box.bottom=Math.max(box.bottom,coord.y);box.left=Math.min(box.left,coord.x)}return box};goog.math.Box.prototype.clone=function(){return new goog.math.Box(this.top,this.right,this.bottom,this.left)};
if(goog.DEBUG)goog.math.Box.prototype.toString=function(){return"("+this.top+"t, "+this.right+"r, "+this.bottom+"b, "+this.left+"l)"};goog.math.Box.prototype.contains=function(other){return goog.math.Box.contains(this,other)};goog.math.Box.prototype.expand=function(top,opt_right,opt_bottom,opt_left){if(goog.isObject(top)){this.top-=top.top;this.right+=top.right;this.bottom+=top.bottom;this.left-=top.left}else{this.top-=top;this.right+=opt_right;this.bottom+=opt_bottom;this.left-=opt_left}return this};
goog.math.Box.prototype.expandToInclude=function(box){this.left=Math.min(this.left,box.left);this.top=Math.min(this.top,box.top);this.right=Math.max(this.right,box.right);this.bottom=Math.max(this.bottom,box.bottom)};goog.math.Box.equals=function(a,b){if(a==b)return true;if(!a||!b)return false;return a.top==b.top&&a.right==b.right&&a.bottom==b.bottom&&a.left==b.left};
goog.math.Box.contains=function(box,other){if(!box||!other)return false;if(other instanceof goog.math.Box)return other.left>=box.left&&other.right<=box.right&&other.top>=box.top&&other.bottom<=box.bottom;return other.x>=box.left&&other.x<=box.right&&other.y>=box.top&&other.y<=box.bottom};
goog.math.Box.distance=function(box,coord){if(coord.x>=box.left&&coord.x<=box.right){if(coord.y>=box.top&&coord.y<=box.bottom)return 0;return coord.y<box.top?box.top-coord.y:coord.y-box.bottom}if(coord.y>=box.top&&coord.y<=box.bottom)return coord.x<box.left?box.left-coord.x:coord.x-box.right;return goog.math.Coordinate.distance(coord,new goog.math.Coordinate(coord.x<box.left?box.left:box.right,coord.y<box.top?box.top:box.bottom))};
goog.math.Box.intersects=function(a,b){return a.left<=b.right&&b.left<=a.right&&a.top<=b.bottom&&b.top<=a.bottom};goog.provide("goog.math.Range");goog.math.Range=function(a,b){a=Number(a);b=Number(b);this.start=a<b?a:b;this.end=a<b?b:a};goog.math.Range.prototype.clone=function(){return new goog.math.Range(this.start,this.end)};if(goog.DEBUG)goog.math.Range.prototype.toString=function(){return"["+this.start+", "+this.end+"]"};goog.math.Range.equals=function(a,b){if(a==b)return true;if(!a||!b)return false;return a.start==b.start&&a.end==b.end};
goog.math.Range.intersection=function(a,b){var c0=Math.max(a.start,b.start);var c1=Math.min(a.end,b.end);return c0<=c1?new goog.math.Range(c0,c1):null};goog.math.Range.hasIntersection=function(a,b){return Math.max(a.start,b.start)<=Math.min(a.end,b.end)};goog.math.Range.boundingRange=function(a,b){return new goog.math.Range(Math.min(a.start,b.start),Math.max(a.end,b.end))};goog.math.Range.contains=function(a,b){return a.start<=b.start&&a.end>=b.end};
goog.math.Range.containsPoint=function(range,p){return range.start<=p&&range.end>=p};goog.provide("goog.math.Size");goog.math.Size=function(width,height){this.width=width;this.height=height};goog.math.Size.equals=function(a,b){if(a==b)return true;if(!a||!b)return false;return a.width==b.width&&a.height==b.height};goog.math.Size.prototype.clone=function(){return new goog.math.Size(this.width,this.height)};if(goog.DEBUG)goog.math.Size.prototype.toString=function(){return"("+this.width+" x "+this.height+")"};goog.math.Size.prototype.getLongest=function(){return Math.max(this.width,this.height)};
goog.math.Size.prototype.getShortest=function(){return Math.min(this.width,this.height)};goog.math.Size.prototype.area=function(){return this.width*this.height};goog.math.Size.prototype.aspectRatio=function(){return this.width/this.height};goog.math.Size.prototype.isEmpty=function(){return!this.area()};goog.math.Size.prototype.ceil=function(){this.width=Math.ceil(this.width);this.height=Math.ceil(this.height);return this};
goog.math.Size.prototype.fitsInside=function(target){return this.width<=target.width&&this.height<=target.height};goog.math.Size.prototype.floor=function(){this.width=Math.floor(this.width);this.height=Math.floor(this.height);return this};goog.math.Size.prototype.round=function(){this.width=Math.round(this.width);this.height=Math.round(this.height);return this};goog.math.Size.prototype.scale=function(s){this.width*=s;this.height*=s;return this};
goog.math.Size.prototype.scaleToFit=function(target){var s=this.aspectRatio()>target.aspectRatio()?target.width/this.width:target.height/this.height;return this.scale(s)};goog.provide("goog.math.Rect");goog.require("goog.math.Box");goog.require("goog.math.Size");goog.math.Rect=function(x,y,w,h){this.left=x;this.top=y;this.width=w;this.height=h};goog.math.Rect.prototype.clone=function(){return new goog.math.Rect(this.left,this.top,this.width,this.height)};goog.math.Rect.prototype.toBox=function(){var right=this.left+this.width;var bottom=this.top+this.height;return new goog.math.Box(this.top,right,bottom,this.left)};
goog.math.Rect.createFromBox=function(box){return new goog.math.Rect(box.left,box.top,box.right-box.left,box.bottom-box.top)};if(goog.DEBUG)goog.math.Rect.prototype.toString=function(){return"("+this.left+", "+this.top+" - "+this.width+"w x "+this.height+"h)"};goog.math.Rect.equals=function(a,b){if(a==b)return true;if(!a||!b)return false;return a.left==b.left&&a.width==b.width&&a.top==b.top&&a.height==b.height};
goog.math.Rect.prototype.intersection=function(rect){var x0=Math.max(this.left,rect.left);var x1=Math.min(this.left+this.width,rect.left+rect.width);if(x0<=x1){var y0=Math.max(this.top,rect.top);var y1=Math.min(this.top+this.height,rect.top+rect.height);if(y0<=y1){this.left=x0;this.top=y0;this.width=x1-x0;this.height=y1-y0;return true}}return false};
goog.math.Rect.intersection=function(a,b){var x0=Math.max(a.left,b.left);var x1=Math.min(a.left+a.width,b.left+b.width);if(x0<=x1){var y0=Math.max(a.top,b.top);var y1=Math.min(a.top+a.height,b.top+b.height);if(y0<=y1)return new goog.math.Rect(x0,y0,x1-x0,y1-y0)}return null};goog.math.Rect.intersects=function(a,b){return a.left<=b.left+b.width&&b.left<=a.left+a.width&&a.top<=b.top+b.height&&b.top<=a.top+a.height};
goog.math.Rect.prototype.intersects=function(rect){return goog.math.Rect.intersects(this,rect)};
goog.math.Rect.difference=function(a,b){var intersection=goog.math.Rect.intersection(a,b);if(!intersection||!intersection.height||!intersection.width)return[a.clone()];var result=[];var top=a.top;var height=a.height;var ar=a.left+a.width;var ab=a.top+a.height;var br=b.left+b.width;var bb=b.top+b.height;if(b.top>a.top){result.push(new goog.math.Rect(a.left,a.top,a.width,b.top-a.top));top=b.top;height-=b.top-a.top}if(bb<ab){result.push(new goog.math.Rect(a.left,bb,a.width,ab-bb));height=bb-top}if(b.left>
a.left)result.push(new goog.math.Rect(a.left,top,b.left-a.left,height));if(br<ar)result.push(new goog.math.Rect(br,top,ar-br,height));return result};goog.math.Rect.prototype.difference=function(rect){return goog.math.Rect.difference(this,rect)};
goog.math.Rect.prototype.boundingRect=function(rect){var right=Math.max(this.left+this.width,rect.left+rect.width);var bottom=Math.max(this.top+this.height,rect.top+rect.height);this.left=Math.min(this.left,rect.left);this.top=Math.min(this.top,rect.top);this.width=right-this.left;this.height=bottom-this.top};goog.math.Rect.boundingRect=function(a,b){if(!a||!b)return null;var clone=a.clone();clone.boundingRect(b);return clone};
goog.math.Rect.prototype.contains=function(another){if(another instanceof goog.math.Rect)return this.left<=another.left&&this.left+this.width>=another.left+another.width&&this.top<=another.top&&this.top+this.height>=another.top+another.height;else return another.x>=this.left&&another.x<=this.left+this.width&&another.y>=this.top&&another.y<=this.top+this.height};goog.math.Rect.prototype.getSize=function(){return new goog.math.Size(this.width,this.height)};goog.provide("goog.math");goog.require("goog.array");goog.require("goog.math.Box");goog.require("goog.math.Coordinate");goog.require("goog.math.Range");goog.require("goog.math.Rect");goog.require("goog.math.Size");goog.math.randomInt=function(a){return Math.floor(Math.random()*a)};goog.math.uniformRandom=function(a,b){return a+Math.random()*(b-a)};goog.math.clamp=function(value,min,max){return Math.min(Math.max(value,min),max)};goog.math.modulo=function(a,b){var r=a%b;return r*b<0?r+b:r};
goog.math.lerp=function(a,b,x){return a+x*(b-a)};goog.math.nearlyEquals=function(a,b,opt_tolerance){return Math.abs(a-b)<=(opt_tolerance||1.0E-6)};goog.math.standardAngle=function(angle){return goog.math.modulo(angle,360)};goog.math.toRadians=function(angleDegrees){return angleDegrees*Math.PI/180};goog.math.toDegrees=function(angleRadians){return angleRadians*180/Math.PI};goog.math.angleDx=function(degrees,radius){return radius*Math.cos(goog.math.toRadians(degrees))};
goog.math.angleDy=function(degrees,radius){return radius*Math.sin(goog.math.toRadians(degrees))};goog.math.angle=function(x1,y1,x2,y2){return goog.math.standardAngle(goog.math.toDegrees(Math.atan2(y2-y1,x2-x1)))};goog.math.angleDifference=function(startAngle,endAngle){var d=goog.math.standardAngle(endAngle)-goog.math.standardAngle(startAngle);if(d>180)d=d-360;else if(d<=-180)d=360+d;return d};goog.math.sign=function(x){return x==0?0:x<0?-1:1};
goog.math.longestCommonSubsequence=function(array1,array2,opt_compareFn,opt_collectorFn){var compare=opt_compareFn||function(a,b){return a==b};var collect=opt_collectorFn||function(i1,i2){return array1[i1]};var length1=array1.length;var length2=array2.length;var arr=[];for(var i=0;i<length1+1;i++){arr[i]=[];arr[i][0]=0}for(var j=0;j<length2+1;j++)arr[0][j]=0;for(i=1;i<=length1;i++)for(j=1;j<=length1;j++)if(compare(array1[i-1],array2[j-1]))arr[i][j]=arr[i-1][j-1]+1;else arr[i][j]=Math.max(arr[i-1][j],
arr[i][j-1]);var result=[];var i=length1,j=length2;while(i>0&&j>0)if(compare(array1[i-1],array2[j-1])){result.unshift(collect(i-1,j-1));i--;j--}else if(arr[i-1][j]>arr[i][j-1])i--;else j--;return result};goog.math.sum=function(var_args){return goog.array.reduce(arguments,function(sum,value){return sum+value},0)};goog.math.average=function(var_args){return goog.math.sum.apply(null,arguments)/arguments.length};
goog.math.standardDeviation=function(var_args){var sampleSize=arguments.length;if(sampleSize<2)return 0;var mean=goog.math.average.apply(null,arguments);var variance=goog.math.sum.apply(null,goog.array.map(arguments,function(val){return Math.pow(val-mean,2)}))/(sampleSize-1);return Math.sqrt(variance)};goog.math.isInt=function(num){return isFinite(num)&&num%1==0};goog.math.isFiniteNumber=function(num){return isFinite(num)&&!isNaN(num)};goog.provide("goog.math.Line");goog.require("goog.math");goog.require("goog.math.Coordinate");goog.math.Line=function(x0,y0,x1,y1){this.x0=x0;this.y0=y0;this.x1=x1;this.y1=y1};goog.math.Line.prototype.clone=function(){return new goog.math.Line(this.x0,this.y0,this.x1,this.y1)};goog.math.Line.prototype.equals=function(other){return this.x0==other.x0&&this.y0==other.y0&&this.x1==other.x1&&this.y1==other.y1};
goog.math.Line.prototype.getSegmentLengthSquared=function(){var xdist=this.x1-this.x0;var ydist=this.y1-this.y0;return xdist*xdist+ydist*ydist};goog.math.Line.prototype.getSegmentLength=function(){return Math.sqrt(this.getSegmentLengthSquared())};
goog.math.Line.prototype.getClosestLinearInterpolation_=function(x,opt_y){var y;if(x instanceof goog.math.Coordinate){y=x.y;x=x.x}else y=opt_y;var x0=this.x0;var y0=this.y0;var xChange=this.x1-x0;var yChange=this.y1-y0;return((x-x0)*xChange+(y-y0)*yChange)/this.getSegmentLengthSquared()};goog.math.Line.prototype.getInterpolatedPoint=function(t){return new goog.math.Coordinate(goog.math.lerp(this.x0,this.x1,t),goog.math.lerp(this.y0,this.y1,t))};
goog.math.Line.prototype.getClosestPoint=function(x,opt_y){return this.getInterpolatedPoint(this.getClosestLinearInterpolation_(x,opt_y))};goog.math.Line.prototype.getClosestSegmentPoint=function(x,opt_y){return this.getInterpolatedPoint(goog.math.clamp(this.getClosestLinearInterpolation_(x,opt_y),0,1))};goog.provide("kemia.math.Line");goog.require("goog.math.Line");kemia.math.Line=function(coord0,coord1){goog.math.Line.call(this,coord0.x,coord0.y,coord1.x,coord1.y)};goog.inherits(kemia.math.Line,goog.math.Line);kemia.math.Line.prototype.getTheta=function(){var xdelta=this.x1-this.x0;var ydelta=this.y1-this.y0;return Math.atan2(ydelta,xdelta)};kemia.math.Line.prototype.getStart=function(){return new goog.math.Coordinate(this.x0,this.y0)};
kemia.math.Line.prototype.getEnd=function(){return new goog.math.Coordinate(this.x1,this.y1)};goog.provide("kemia.view.BondRenderer");goog.require("kemia.view.Renderer");goog.require("kemia.math.Line");kemia.view.BondRenderer=function(controller,graphics,opt_config,defaultConfig){kemia.view.Renderer.call(this,controller,graphics,opt_config,kemia.view.BondRenderer.defaultConfig)};goog.inherits(kemia.view.BondRenderer,kemia.view.Renderer);kemia.view.BondRenderer.prototype.render=function(bond,transform){this.transform=transform};
kemia.view.BondRenderer.prototype.highlightOn=function(bond,opt_group){var strokeWidth=this.config.get("bond")["stroke"]["width"]*2;var color=this.config.get("highlight")["color"];var stroke=new goog.graphics.Stroke(strokeWidth,color);var fill=null;var radius=this.config.get("highlight")["radius"]*this.transform.getScaleX();var theta=-kemia.view.BondRenderer.getTheta(bond)*180/Math.PI;var angle=theta+90;var arcExtent;if(theta<=0)arcExtent=bond.source.coord.y<=bond.target.coord.y?180:-180;else arcExtent=
bond.source.coord.y>bond.target.coord.y?180:-180;var coords=this.transform.transformCoords([bond.source.coord,bond.target.coord]);var path=new goog.graphics.Path;path.arc(coords[0].x,coords[0].y,radius,radius,angle,arcExtent);path.arc(coords[1].x,coords[1].y,radius,radius,angle,-arcExtent);if(!opt_group)opt_group=this.graphics.createGroup();this.graphics.drawPath(path,stroke,fill,opt_group);return opt_group};
kemia.view.BondRenderer.getTheta=function(bond){return(new kemia.math.Line(bond.source.coord,bond.target.coord)).getTheta()};kemia.view.BondRenderer.hasSymbol=function(atom){return atom.symbol!="C"||atom.countBonds()==1};kemia.view.BondRenderer.defaultConfig={bond:{stroke:{width:2,color:"black"},fill:{color:"black"}},highlight:{radius:0.3,color:"blue"}};goog.provide("goog.math.Vec2");goog.require("goog.math");goog.require("goog.math.Coordinate");goog.math.Vec2=function(opt_x,opt_y){this.x=Number(opt_x)||0;this.y=Number(opt_y)||0};goog.inherits(goog.math.Vec2,goog.math.Coordinate);goog.math.Vec2.randomUnit=function(){var angle=Math.random()*Math.PI*2;return new goog.math.Vec2(Math.cos(angle),Math.sin(angle))};
goog.math.Vec2.random=function(){var mag=Math.sqrt(Math.random());var angle=Math.random()*Math.PI*2;return new goog.math.Vec2(Math.cos(angle)*mag,Math.sin(angle)*mag)};goog.math.Vec2.fromCoordinate=function(a){return new goog.math.Vec2(a.x,a.y)};goog.math.Vec2.prototype.clone=function(){return new goog.math.Vec2(this.x,this.y)};goog.math.Vec2.prototype.magnitude=function(){return Math.sqrt(this.x*this.x+this.y*this.y)};
goog.math.Vec2.prototype.squaredMagnitude=function(){return this.x*this.x+this.y*this.y};goog.math.Vec2.prototype.scale=function(s){this.x*=s;this.y*=s;return this};goog.math.Vec2.prototype.invert=function(){this.x=-this.x;this.y=-this.y;return this};goog.math.Vec2.prototype.normalize=function(){return this.scale(1/this.magnitude())};goog.math.Vec2.prototype.add=function(b){this.x+=b.x;this.y+=b.y;return this};goog.math.Vec2.prototype.subtract=function(b){this.x-=b.x;this.y-=b.y;return this};
goog.math.Vec2.prototype.equals=function(b){return this==b||!!b&&this.x==b.x&&this.y==b.y};goog.math.Vec2.distance=goog.math.Coordinate.distance;goog.math.Vec2.squaredDistance=goog.math.Coordinate.squaredDistance;goog.math.Vec2.equals=goog.math.Coordinate.equals;goog.math.Vec2.sum=function(a,b){return new goog.math.Vec2(a.x+b.x,a.y+b.y)};goog.math.Vec2.difference=function(a,b){return new goog.math.Vec2(a.x-b.x,a.y-b.y)};goog.math.Vec2.dot=function(a,b){return a.x*b.x+a.y*b.y};
goog.math.Vec2.lerp=function(a,b,x){return new goog.math.Vec2(goog.math.lerp(a.x,b.x,x),goog.math.lerp(a.y,b.y,x))};goog.provide("kemia.view.SingleBondRenderer");goog.require("kemia.view.BondRenderer");goog.require("goog.math.Vec2");goog.require("goog.math.Coordinate");kemia.view.SingleBondRenderer=function(parentEventTarget,graphics,opt_config){kemia.view.BondRenderer.call(this,parentEventTarget,graphics,opt_config,kemia.view.SingleBondRenderer.defaultConfig)};goog.inherits(kemia.view.SingleBondRenderer,kemia.view.BondRenderer);
kemia.view.SingleBondRenderer.prototype.render=function(bond,transform,bondPath){kemia.view.SingleBondRenderer.superClass_.render.call(this,bond,transform);var coords=[bond.source.coord,bond.target.coord];var bv=goog.math.Vec2.fromCoordinate(goog.math.Coordinate.difference(coords[1],coords[0]));bv.scale(1/bv.magnitude()*0.2);if(kemia.view.BondRenderer.hasSymbol(bond.source))coords[0]=goog.math.Coordinate.sum(coords[0],bv);if(kemia.view.BondRenderer.hasSymbol(bond.target))coords[1]=goog.math.Coordinate.difference(coords[1],
bv);coords=transform.transformCoords([coords[0],coords[1]]);bondPath.moveTo(coords[0].x,coords[0].y);bondPath.lineTo(coords[1].x,coords[1].y)};goog.provide("kemia.view.DoubleBondRenderer");goog.require("kemia.view.BondRenderer");kemia.view.DoubleBondRenderer=function(controller,graphics,opt_config){kemia.view.BondRenderer.call(this,controller,graphics,opt_config,kemia.view.DoubleBondRenderer.defaultConfig)};goog.inherits(kemia.view.DoubleBondRenderer,kemia.view.BondRenderer);function triangleSign(a,b,c){return(a.x-c.x)*(b.y-c.y)-(a.y-c.y)*(b.x-c.x)}
function isOnSameSide(bond,p1,p2){return triangleSign(bond.source.coord,bond.target.coord,p1)*triangleSign(bond.source.coord,bond.target.coord,p2)>0}
kemia.view.DoubleBondRenderer.prototype.render=function(bond,transform,bondPath){kemia.view.DoubleBondRenderer.superClass_.render.call(this,bond,transform);var ring=kemia.view.DoubleBondRenderer.getFirstRing(bond);if(ring){var bv=goog.math.Vec2.fromCoordinate(goog.math.Coordinate.difference(bond.target.coord,bond.source.coord));var bondLength=bv.magnitude();var bondWidth=bondLength/6;bv.scale(1/bondLength*bondWidth);var orthogonal=new goog.math.Vec2(bv.y,-bv.x);var side=goog.math.Coordinate.sum(bond.source.coord,
orthogonal);var center=ring.ringCenter;if(!isOnSameSide(bond,side,center))orthogonal.invert();var coord1=goog.math.Coordinate.sum(bond.source.coord,orthogonal);var coord2=goog.math.Coordinate.sum(bond.target.coord,orthogonal);var coord3=bond.source.coord;var coord4=bond.target.coord;if(kemia.view.BondRenderer.hasSymbol(bond.source)){var space=bv.clone();space.normalize();space.scale(0.2);coord1=goog.math.Coordinate.sum(coord1,space);coord3=goog.math.Coordinate.sum(coord3,space)}else coord1=goog.math.Coordinate.sum(coord1,
bv);if(kemia.view.BondRenderer.hasSymbol(bond.target)){var space=bv.clone();space.normalize();space.scale(0.2);coord2=goog.math.Coordinate.difference(coord2,space);coord4=goog.math.Coordinate.difference(coord4,space)}else coord2=goog.math.Coordinate.difference(coord2,bv);var coords=transform.transformCoords([coord1,coord2,coord3,coord4]);bondPath.moveTo(coords[0].x,coords[0].y);bondPath.lineTo(coords[1].x,coords[1].y);bondPath.moveTo(coords[2].x,coords[2].y);bondPath.lineTo(coords[3].x,coords[3].y)}else{var bv=
goog.math.Vec2.fromCoordinate(goog.math.Coordinate.difference(bond.target.coord,bond.source.coord));var bondLength=bv.magnitude();var bondWidth=bondLength/12;bv.scale(1/bondLength*bondWidth);var orthogonal=new goog.math.Vec2(bv.y,-bv.x);var coord1=goog.math.Coordinate.sum(bond.source.coord,orthogonal);var coord2=goog.math.Coordinate.sum(bond.target.coord,orthogonal);var coord3=goog.math.Coordinate.difference(bond.source.coord,orthogonal);var coord4=goog.math.Coordinate.difference(bond.target.coord,
orthogonal);if(kemia.view.BondRenderer.hasSymbol(bond.source)){var space=bv.clone();space.normalize();space.scale(0.2);coord1=goog.math.Coordinate.sum(coord1,space);coord3=goog.math.Coordinate.sum(coord3,space)}if(kemia.view.BondRenderer.hasSymbol(bond.target)){var space=bv.clone();space.normalize();space.scale(0.2);coord2=goog.math.Coordinate.difference(coord2,space);coord4=goog.math.Coordinate.difference(coord4,space)}var coords=transform.transformCoords([coord1,coord2,coord3,coord4]);bondPath.moveTo(coords[0].x,
coords[0].y);bondPath.lineTo(coords[1].x,coords[1].y);bondPath.moveTo(coords[2].x,coords[2].y);bondPath.lineTo(coords[3].x,coords[3].y)}};kemia.view.DoubleBondRenderer.getFirstRing=function(bond){return goog.array.find(bond.molecule.getRings(),function(ring){return goog.array.contains(ring.bonds,this)},bond)};goog.provide("kemia.view.TripleBondRenderer");goog.require("kemia.view.BondRenderer");kemia.view.TripleBondRenderer=function(controller,graphics,opt_config){kemia.view.BondRenderer.call(this,controller,graphics,opt_config,kemia.view.TripleBondRenderer.defaultConfig)};goog.inherits(kemia.view.TripleBondRenderer,kemia.view.BondRenderer);
kemia.view.TripleBondRenderer.prototype.render=function(bond,transform){group=kemia.view.TripleBondRenderer.superClass_.render.call(this,bond,transform);var strokeWidth=this.config.get("bond")["stroke"]["width"];var bondStroke=new goog.graphics.Stroke(strokeWidth,this.config.get("bond")["stroke"]["color"]);var bondFill=null;var theta=kemia.view.BondRenderer.getTheta(bond);var angle_left=theta+Math.PI/2;var angle_right=theta-Math.PI/2;var bondWidth=goog.math.Coordinate.distance(bond.source.coord,bond.target.coord)/
6;var transleft=new kemia.graphics.AffineTransform(1,0,0,1,Math.cos(angle_left)*bondWidth,Math.sin(angle_left)*bondWidth);var transright=new kemia.graphics.AffineTransform(1,0,0,1,Math.cos(angle_right)*bondWidth,Math.sin(angle_right)*bondWidth);var leftside=transleft.transformCoords([bond.source.coord,bond.target.coord]);var rightside=transright.transformCoords([bond.source.coord,bond.target.coord]);var coords=transform.transformCoords([bond.source.coord,bond.target.coord,leftside[0],leftside[1],
rightside[0],rightside[1]]);var bondPath=new goog.graphics.Path;bondPath.moveTo(coords[0].x,coords[0].y);bondPath.lineTo(coords[1].x,coords[1].y);bondPath.moveTo(coords[2].x,coords[2].y);bondPath.lineTo(coords[3].x,coords[3].y);bondPath.moveTo(coords[4].x,coords[4].y);bondPath.lineTo(coords[5].x,coords[5].y);this.graphics.drawPath(bondPath,bondStroke,bondFill)};goog.provide("kemia.view.QuadrupleBondRenderer");goog.require("kemia.view.BondRenderer");kemia.view.QuadrupleBondRenderer=function(controller,graphics,opt_config){kemia.view.BondRenderer.call(this,controller,graphics,opt_config,kemia.view.QuadrupleBondRenderer.defaultConfig)};goog.inherits(kemia.view.QuadrupleBondRenderer,kemia.view.BondRenderer);
kemia.view.QuadrupleBondRenderer.prototype.render=function(bond,transform){kemia.view.QuadrupleBondRenderer.superClass_.render.call(this,bond,transform);var strokeWidth=this.config.get("bond")["stroke"]["width"];var bondStroke=new goog.graphics.Stroke(strokeWidth,this.config.get("bond")["stroke"]["color"]);var bondFill=null;var theta=kemia.view.BondRenderer.getTheta(bond);var angle_left=theta+Math.PI/2;var angle_right=theta-Math.PI/2;var bondWidth=goog.math.Coordinate.distance(bond.source.coord,bond.target.coord)/
6;var transleft1=new kemia.graphics.AffineTransform(1,0,0,1,Math.cos(angle_left)*bondWidth/3,Math.sin(angle_left)*bondWidth/3);var transright1=new kemia.graphics.AffineTransform(1,0,0,1,Math.cos(angle_right)*bondWidth/3,Math.sin(angle_right)*bondWidth/3);var transleft2=new kemia.graphics.AffineTransform(1,0,0,1,Math.cos(angle_left)*bondWidth,Math.sin(angle_left)*bondWidth);var transright2=new kemia.graphics.AffineTransform(1,0,0,1,Math.cos(angle_right)*bondWidth,Math.sin(angle_right)*bondWidth);var leftside1=
transleft1.transformCoords([bond.source.coord,bond.target.coord]);var rightside1=transright1.transformCoords([bond.source.coord,bond.target.coord]);var leftside2=transleft2.transformCoords([bond.source.coord,bond.target.coord]);var rightside2=transright2.transformCoords([bond.source.coord,bond.target.coord]);var coords=transform.transformCoords([leftside1[0],leftside1[1],rightside1[0],rightside1[1],leftside2[0],leftside2[1],rightside2[0],rightside2[1]]);var bondPath=new goog.graphics.Path;bondPath.moveTo(coords[0].x,
coords[0].y);bondPath.lineTo(coords[1].x,coords[1].y);bondPath.moveTo(coords[2].x,coords[2].y);bondPath.lineTo(coords[3].x,coords[3].y);bondPath.moveTo(coords[4].x,coords[4].y);bondPath.lineTo(coords[5].x,coords[5].y);bondPath.moveTo(coords[6].x,coords[6].y);bondPath.lineTo(coords[7].x,coords[7].y);this.graphics.drawPath(bondPath,bondStroke,bondFill)};goog.provide("kemia.view.SingleUpBondRenderer");goog.require("kemia.view.BondRenderer");kemia.view.SingleUpBondRenderer=function(controller,graphics,opt_config){kemia.view.BondRenderer.call(this,controller,graphics,opt_config,kemia.view.SingleUpBondRenderer.defaultConfig)};goog.inherits(kemia.view.SingleUpBondRenderer,kemia.view.BondRenderer);
kemia.view.SingleUpBondRenderer.prototype.render=function(bond,transform,bondPath){kemia.view.SingleUpBondRenderer.superClass_.render.call(this,bond,transform);var strokeWidth=this.config.get("bond")["stroke"]["width"]/10;var theta=kemia.view.BondRenderer.getTheta(bond);var angle_left=theta+Math.PI/2;var angle_right=theta-Math.PI/2;var trans1=new kemia.graphics.AffineTransform(1,0,0,1,Math.cos(angle_left)*strokeWidth,Math.sin(angle_left)*strokeWidth);var target1=trans1.transformCoords([bond.target.coord])[0];
var trans2=new kemia.graphics.AffineTransform(1,0,0,1,Math.cos(angle_right)*strokeWidth,Math.sin(angle_right)*strokeWidth);var target2=trans2.transformCoords([bond.target.coord])[0];if(bond.target.symbol!="C"){var correct=3;target1.x=(target1.x*(correct-1)+bond.source.coord.x)/correct;target1.y=(target1.y*(correct-1)+bond.source.coord.y)/correct;target2.x=(target2.x*(correct-1)+bond.source.coord.x)/correct;target2.y=(target2.y*(correct-1)+bond.source.coord.y)/correct}var coords=transform.transformCoords([bond.source.coord,
target1,target2]);bondPath.moveTo(coords[0].x,coords[0].y);bondPath.lineTo(coords[1].x,coords[1].y);bondPath.lineTo(coords[2].x,coords[2].y)};goog.provide("kemia.view.SingleDownBondRenderer");goog.require("kemia.view.BondRenderer");kemia.view.SingleDownBondRenderer=function(controller,graphics,opt_config){kemia.view.BondRenderer.call(this,controller,graphics,opt_config,kemia.view.SingleDownBondRenderer.defaultConfig)};goog.inherits(kemia.view.SingleDownBondRenderer,kemia.view.BondRenderer);
kemia.view.SingleDownBondRenderer.prototype.render=function(bond,transform,path){kemia.view.SingleDownBondRenderer.superClass_.render.call(this,bond,transform);var width=this.config.get("bond")["stroke"]["width"]/10;var theta=kemia.view.BondRenderer.getTheta(bond);var angle_left=theta+Math.PI/2;var angle_right=theta-Math.PI/2;var transleft=new kemia.graphics.AffineTransform(1,0,0,1,Math.cos(angle_left)*width,Math.sin(angle_left)*width);var transright=new kemia.graphics.AffineTransform(1,0,0,1,Math.cos(angle_right)*
width,Math.sin(angle_right)*width);var leftside=transleft.transformCoords([bond.source.coord,bond.target.coord]);var rightside=transright.transformCoords([bond.source.coord,bond.target.coord]);var coords=transform.transformCoords([leftside[0],leftside[1],rightside[0],rightside[1],bond.source.coord]);var lines=7;var correct=0;if(bond.target.symbol!="C")correct=1;for(var j=0;j<lines-correct;j++){path.moveTo(((lines-j)*coords[4].x+j*coords[1].x)/lines,((lines-j)*coords[4].y+j*coords[1].y)/lines);path.lineTo(((lines-
j)*coords[4].x+j*coords[3].x)/lines,((lines-j)*coords[4].y+j*coords[3].y)/lines)}};goog.provide("kemia.view.SingleUpOrDownBondRenderer");goog.require("kemia.view.BondRenderer");kemia.view.SingleUpOrDownBondRenderer=function(controller,graphics,opt_config){kemia.view.BondRenderer.call(this,controller,graphics,opt_config,kemia.view.SingleUpOrDownBondRenderer.defaultConfig)};goog.inherits(kemia.view.SingleUpOrDownBondRenderer,kemia.view.BondRenderer);
kemia.view.SingleUpOrDownBondRenderer.prototype.render=function(bond,transform){kemia.view.SingleUpOrDownBondRenderer.superClass_.render.call(this,bond,transform);var path=new goog.graphics.Path;var width=this.config.get("bond")["stroke"]["width"]/10;var theta=kemia.view.BondRenderer.getTheta(bond);var angle_left=theta+Math.PI/2;var angle_right=theta-Math.PI/2;var transleft=new kemia.graphics.AffineTransform(1,0,0,1,Math.cos(angle_left)*width,Math.sin(angle_left)*width);var transright=new kemia.graphics.AffineTransform(1,
0,0,1,Math.cos(angle_right)*width,Math.sin(angle_right)*width);var leftside=transleft.transformCoords([bond.source.coord,bond.target.coord]);var rightside=transright.transformCoords([bond.source.coord,bond.target.coord]);var coords=transform.transformCoords([leftside[0],leftside[1],rightside[0],rightside[1]]);var stroke=new goog.graphics.Stroke(this.config.get("bond")["stroke"]["width"],this.config.get("bond")["stroke"]["color"]);var fill=null;path.moveTo(coords[0].x,coords[0].y);for(var j=1,lines=
10;j<lines;j++)if(j%2)path.lineTo(coords[0].x+(coords[1].x-coords[0].x)*j/lines,coords[0].y+(coords[1].y-coords[0].y)*j/lines);else path.lineTo(coords[2].x+(coords[3].x-coords[2].x)*j/lines,coords[2].y+(coords[3].y-coords[2].y)*j/lines);this.graphics.drawPath(path,stroke,fill)};goog.provide("kemia.model.Flags");kemia.model.Flags.ISPLACED=0;kemia.model.Flags.VISITED=1;kemia.model.Flags.ISINRING=2;kemia.model.Flags.MAX_FLAG_INDEX=2;goog.provide("kemia.resource.Covalence");kemia.resource.Covalence={C:4,Si:4,N:3,P:3,O:2,S:2,H:1};goog.provide("kemia.model.Atom");goog.provide("kemia.model.Atom.Hybridizations");goog.require("kemia.model.Flags");goog.require("kemia.resource.Covalence");goog.require("goog.structs.Set");goog.require("goog.math.Coordinate");
kemia.model.Atom=function(symbol,x,y,opt_charge,opt_aromatic,opt_isotope){this.symbol=symbol;this.coord=new goog.math.Coordinate(x,y);this.bonds=new goog.structs.Set;this.charge=goog.isDef(opt_charge)?opt_charge:0;this.isotope=goog.isDef(opt_isotope)?opt_isotope:0;this.aromatic=goog.isDef(opt_aromatic)?opt_aromatic:false;this.hybridization=null;this.flags=new Array(kemia.model.Flags.MAX_FLAG_INDEX+1)};kemia.model.Atom.prototype.countBonds=function(){return this.bonds.getCount()};
kemia.model.Atom.prototype.hydrogenCount=function(){var cov=kemia.resource.Covalence[this.symbol];var totalBondOrder=goog.array.reduce(this.bonds.getValues(),function(r,v){return r+v.order},0);var hydrogenCount=0;if(cov)hydrogenCount=cov-totalBondOrder+this.charge;return hydrogenCount};kemia.model.Atom.prototype.getNeighbors=function(){var bonds=this.bonds.getValues();var nbrs=[];for(var i=0,li=bonds.length;i<li;i++)nbrs.push(bonds[i].otherAtom(this));return nbrs};
kemia.model.Atom.prototype.clone=function(){return new kemia.model.Atom(this.symbol,this.coord.x,this.coord.y,this.charge,this.aromatic,this.isotope)};kemia.model.Atom.Hybridizations={S:0,SP1:1,SP2:2,SP3:3,PLANAR3:4,SP3D1:5,SP3D2:6,SP3D3:7,SP3D4:8,SP3D5:9};kemia.model.Atom.prototype.setFlag=function(flag_type,flag_value){this.flags[flag_type]=flag_value};goog.provide("kemia.model.Bond");goog.require("kemia.model.Atom");kemia.model.Bond=function(source,target,opt_order,opt_stereo,opt_aromatic,opt_molecule){this.source=source;this.target=target;this.order=goog.isDef(opt_order)?opt_order:kemia.model.Bond.ORDER.SINGLE;this.stereo=goog.isDef(opt_stereo)?opt_stereo:kemia.model.Bond.STEREO.NOT_STEREO;this.aromatic=goog.isDef(opt_aromatic)?opt_aromatic:false;this.molecule=goog.isDef(opt_molecule)?opt_molecule:null};
kemia.model.Bond.prototype.otherAtom=function(atom){if(atom===this.source)return this.target;if(atom===this.target)return this.source;return null};kemia.model.Bond.prototype.clone=function(){return new kemia.model.Bond(this.source,this.target,this.order,this.stereo,this.aromatic,this.molecule)};kemia.model.Bond.prototype.deepClone=function(){return new kemia.model.Bond(this.source.clone(),this.target.clone(),this.order,this.stereo,this.aromatic,this.molecule)};
kemia.model.Bond.ORDER={SINGLE:1,DOUBLE:2,TRIPLE:3,QUADRUPLE:4};kemia.model.Bond.STEREO={NOT_STEREO:10,UP:11,UP_OR_DOWN:12,DOWN:13};goog.provide("goog.reflect");goog.reflect.object=function(type,object){return object};goog.provide("kemia.view.BondRendererFactory");goog.require("kemia.view.SingleBondRenderer");goog.require("kemia.view.DoubleBondRenderer");goog.require("kemia.view.TripleBondRenderer");goog.require("kemia.view.QuadrupleBondRenderer");goog.require("kemia.view.SingleUpBondRenderer");goog.require("kemia.view.SingleDownBondRenderer");goog.require("kemia.view.SingleUpOrDownBondRenderer");goog.require("kemia.model.Bond");goog.require("goog.object");goog.require("goog.reflect");
kemia.view.BondRendererFactory=function(controller,graphics,opt_config){this.controller=controller;this.graphics=graphics;this.config=new goog.structs.Map;if(opt_config)this.config.addAll(opt_config)};kemia.view.BondRendererFactory.prototype.logger=goog.debug.Logger.getLogger("kemia.view.BondRendererFactory");
kemia.view.BondRendererFactory.ORDER_RENDERER=goog.object.transpose(goog.reflect.object(kemia.view.BondRendererFactory,{getSingleBondRenderer:kemia.model.Bond.ORDER.SINGLE,getDoubleBondRenderer:kemia.model.Bond.ORDER.DOUBLE,getTripleBondRenderer:kemia.model.Bond.ORDER.TRIPLE,getQuadrupleBondRenderer:kemia.model.Bond.ORDER.QUADRUPLE}));
kemia.view.BondRendererFactory.STEREO_RENDERER=goog.object.transpose(goog.reflect.object(kemia.view.BondRendererFactory,{getSingleBondNotStereoRenderer:kemia.model.Bond.STEREO.NOT_STEREO,getSingleBondUpRenderer:kemia.model.Bond.STEREO.UP,getSingleBondDownRenderer:kemia.model.Bond.STEREO.DOWN,getSingleBondUpOrDownRenderer:kemia.model.Bond.STEREO.UP_OR_DOWN}));
kemia.view.BondRendererFactory.prototype.get=function(bond){return this[kemia.view.BondRendererFactory.ORDER_RENDERER[bond.order]].apply(this,[bond.stereo])};kemia.view.BondRendererFactory.prototype.getSingleBondRenderer=function(stereo){return this[kemia.view.BondRendererFactory.STEREO_RENDERER[stereo]].apply(this)};
kemia.view.BondRendererFactory.prototype.getSingleBondNotStereoRenderer=function(){if(!this.singleNotStereoBondRenderer)this.singleNotStereoBondRenderer=new kemia.view.SingleBondRenderer(this.controller,this.graphics,this.config);return this.singleNotStereoBondRenderer};kemia.view.BondRendererFactory.prototype.getSingleBondUpRenderer=function(){if(!this.singleUpBondRenderer)this.singleUpBondRenderer=new kemia.view.SingleUpBondRenderer(this.controller,this.graphics,this.config);return this.singleUpBondRenderer};
kemia.view.BondRendererFactory.prototype.getSingleBondDownRenderer=function(){if(!this.singleDownBondRenderer)this.singleDownBondRenderer=new kemia.view.SingleDownBondRenderer(this.controller,this.graphics,this.config);return this.singleDownBondRenderer};kemia.view.BondRendererFactory.prototype.getSingleBondUpOrDownRenderer=function(){if(!this.singleUpOrDownBondRenderer)this.singleUpOrDownBondRenderer=new kemia.view.SingleUpOrDownBondRenderer(this.controller,this.graphics,this.config);return this.singleUpOrDownBondRenderer};
kemia.view.BondRendererFactory.prototype.getDoubleBondRenderer=function(){if(!this.doubleBondRenderer)this.doubleBondRenderer=new kemia.view.DoubleBondRenderer(this.controller,this.graphics,this.config);return this.doubleBondRenderer};kemia.view.BondRendererFactory.prototype.getTripleBondRenderer=function(){if(!this.tripleBondRenderer)this.tripleBondRenderer=new kemia.view.TripleBondRenderer(this.controller,this.graphics,this.config);return this.tripleBondRenderer};
kemia.view.BondRendererFactory.prototype.getQuadrupleBondRenderer=function(){if(!this.quadrupleBondRenderer)this.quadrupleBondRenderer=new kemia.view.QuadrupleBondRenderer(this.controller,this.graphics,this.config);return this.quadrupleBondRenderer};goog.provide("kemia.view.AtomRenderer");goog.require("kemia.view.Renderer");goog.require("goog.debug.Logger");kemia.view.AtomRenderer=function(controller,graphics,opt_config){kemia.view.Renderer.call(this,controller,graphics,opt_config,kemia.view.AtomRenderer.defaultConfig)};goog.inherits(kemia.view.AtomRenderer,kemia.view.Renderer);
kemia.view.AtomRenderer.prototype.render=function(atom,transform,opt_group){this.transform=transform;var atom_config=this.config.get("atom");var color=this.config.get(atom.symbol)?this.config.get(atom.symbol)["color"]:atom_config["color"];var scale=transform.getScaleX();var fontSize=scale/1.8>12?15:scale/1.8;var font=new goog.graphics.Font(fontSize,atom_config["fontName"]);var stroke=new goog.graphics.Stroke(atom_config["stroke"]["width"],"black");var fill=new goog.graphics.SolidFill(color);var point=
transform.transformCoords([atom.coord])[0];var symbol=this.compoundSymbol(atom);var graphics=this.graphics;var w=symbol.text.length*0.55*font.size;var h=font.size;if(symbol.text){graphics.drawText(symbol.text,point.x-w/2,point.y-h/2,w,h,symbol.justification,null,font,stroke,fill,opt_group);if(symbol.justification=="left"){if(symbol.subscript||symbol.superscript){var subSize=this.config.get("subscriptSize");if(symbol.subscript)graphics.drawText(symbol.subscript,point.x+w*0.9,point.y,subSize,subSize,
"center",null,font,stroke,fill,opt_group);if(symbol.superscript)graphics.drawText(symbol.superscript,point.x+w,point.y-h*0.8,subSize,subSize,"center",null,font,stroke,fill,opt_group)}}else if(symbol.justification=="right")if(symbol.subscript||symbol.superscript){var subSize=this.config.get("subscriptSize");if(symbol.subscript){graphics.drawText("H",point.x-w*3,point.y-h/2,w,h,"center",null,font,stroke,fill,opt_group);graphics.drawText(symbol.subscript,point.x-w*1.8,point.y,subSize,subSize,"center",
null,font,stroke,fill,opt_group)}if(symbol.superscript)graphics.drawText(symbol.superscript,point.x+w,point.y-h*0.8,subSize,subSize,"center",null,font,stroke,fill,opt_group)}}};
kemia.view.AtomRenderer.prototype.highlightOn=function(atom,opt_group){var atom_config=this.config.get("atom");var strokeWidth=atom_config["stroke"]["width"]*24;var color=this.config.get(atom.symbol)?this.config.get(atom.symbol)["color"]:atom_config["color"];var stroke=null;var fill=new goog.graphics.SolidFill(color,0.3);var radius=atom_config["highlight"]["radius"]*this.transform.getScaleX();var coords=this.transform.transformCoords([atom.coord])[0];if(!opt_group)opt_group=this.graphics.createGroup();
this.graphics.drawCircle(coords.x,coords.y,radius,stroke,fill,opt_group);return opt_group};
kemia.view.AtomRenderer.prototype.compoundSymbol=function(atom){var retval={text:"",justification:"center",superscript:"",subscript:""};if(atom.symbol!="C"||atom.countBonds()==1){var hydrogen_count=atom.hydrogenCount();if(hydrogen_count==0)retval.text=atom.symbol;else{bond_direction=kemia.view.AtomRenderer.bondDirection(atom);var justification="center";if(bond_direction=="SW"||bond_direction=="W"||bond_direction=="NW"){justification="right";if(hydrogen_count==1)retval.text="H";retval.text+=atom.symbol}else{justification=
"left";retval.text=atom.symbol+"H"}if(hydrogen_count>1)retval.subscript=String(hydrogen_count)}if(atom.charge)if(atom.charge>1)retval.superscript+="+"+atom.charge;else if(atom.charge<-1)retval.superscript+=atom.charge;else if(atom.charge==-1)retval.superscript="-";else if(atom.charge==1)retval.superscript="+"}else retval.text="";retval.justification=justification;return retval};
kemia.view.AtomRenderer.bondOrientation=function(atom,i){if(atom.bonds.getValues().length==0)return 0;var bond=atom.bonds.getValues()[i];var target=bond.target.coord;var source=bond.source.coord;var dy=target.y-source.y;var dx=target.x-source.x;if(atom==bond.source){dx=-dx;dy=-dy}var angle=Math.atan2(dy,dx)*180/Math.PI;if(angle<0)angle=360+angle;return angle};
kemia.view.AtomRenderer.bondDirection=function(atom){var nbonds=atom.bonds.getCount();var angle=kemia.view.AtomRenderer.bondOrientation(atom,0);if(nbonds>1){for(var i=1;i<nbonds;++i)angle+=kemia.view.AtomRenderer.bondOrientation(atom,i);angle=angle/nbonds%360}if(angle>350||angle<=10)return"E";else if(angle>10&&angle<=80)return"SE";else if(angle>80&&angle<=100)return"S";else if(angle>100&&angle<=170)return"SW";else if(angle>170&&angle<=190)return"W";else if(angle>190&&angle<=260)return"NW";else if(angle>
260&&angle<=280)return"N";else return"NE"};kemia.view.AtomRenderer.prototype.logger=goog.debug.Logger.getLogger("kemia.view.AtomRenderer");kemia.view.AtomRenderer.defaultConfig={atom:{color:"#FF9999",diameter:0.05,highlight:{radius:0.3},stroke:{width:0.15},fontName:"Arial"},margin:20,subscriptSize:5,N:{color:"blue"},O:{color:"red"},S:{color:"yellow"},P:{color:"orange"},Cl:{color:"green"},F:{color:"green"},Br:{color:"DarkRed"},I:{color:"purple"},C:{color:"black"},H:{color:"white"}};goog.provide("kemia.controller.AtomController");goog.provide("kemia.controller.AtomController.AtomEvent");goog.require("goog.events.EventTarget");goog.require("goog.debug.Logger");kemia.controller.AtomController=function(parentController){goog.events.EventTarget.call(this);this.setParentEventTarget(parentController)};goog.inherits(kemia.controller.AtomController,goog.events.EventTarget);kemia.controller.AtomController.prototype.logger=goog.debug.Logger.getLogger("kemia.controller.AtomController");
kemia.controller.AtomController.prototype.handleMouseOver=function(atom,e){this.dispatchEvent(new kemia.controller.AtomController.AtomEvent(this,atom,kemia.controller.AtomController.EventType.MOUSEOVER))};kemia.controller.AtomController.prototype.handleMouseOut=function(atom,e){this.dispatchEvent(new kemia.controller.AtomController.AtomEvent(this,atom,kemia.controller.AtomController.EventType.MOUSEOUT))};
kemia.controller.AtomController.prototype.handleMouseDown=function(atom,e){this.logger.info("handleMouseDown");e.stopPropagation();this.dispatchEvent(new kemia.controller.AtomController.AtomEvent(this,atom,kemia.controller.AtomController.EventType.MOUSEDOWN))};kemia.controller.AtomController.EventType={MOUSEOVER:"atom_mouseover",MOUSEOUT:"atom_mouseout",MOUSEDOWN:"atom_mousedown"};
kemia.controller.AtomController.AtomEvent=function(controller,atom,type){goog.events.Event.call(this,type,controller);this.atom=atom};goog.inherits(kemia.controller.AtomController.AtomEvent,goog.events.Event);goog.provide("kemia.view.MoleculeRenderer");goog.require("kemia.controller.BondController");goog.require("kemia.view.BondRenderer");goog.require("kemia.view.BondRendererFactory");goog.require("kemia.view.AtomRenderer");goog.require("kemia.controller.AtomController");
kemia.view.MoleculeRenderer=function(controller,graphics,opt_config){kemia.view.Renderer.call(this,controller,graphics,opt_config,kemia.view.MoleculeRenderer.defaultConfig);this.scale_factor=1;this.bondController=new kemia.controller.BondController(controller);this.bondRendererFactory=new kemia.view.BondRendererFactory(this.bondController,graphics,this.config);this.atomController=new kemia.controller.AtomController(controller);this.atomRenderer=new kemia.view.AtomRenderer(this.atomController,graphics,
this.config)};goog.inherits(kemia.view.MoleculeRenderer,kemia.view.Renderer);kemia.view.MoleculeRenderer.prototype.logger=goog.debug.Logger.getLogger("kemia.view.MoleculeRenderer");
kemia.view.MoleculeRenderer.prototype.render=function(molecule,trans){molecule.group=this.graphics.createGroup();var atom_coords=goog.array.map(molecule.atoms,function(a){return a.coord});var box=goog.math.Box.boundingBox.apply(null,atom_coords);if(!trans){var m=this.config.get("margin");var ex_box=box.expand(m,m,m,m);trans=this.buildTransform(ex_box)}this.transform=trans;var center=new goog.math.Coordinate((box.left+box.right)/2,(box.top+box.bottom)/2);var t_center=this.transform.transformCoords([center])[0];
var rx=Math.abs(this.transform.getScaleX()*(box.right-box.left)/2);var ry=Math.abs(this.transform.getScaleY()*(box.bottom-box.top)/2);var bondStroke=new goog.graphics.Stroke(this.config.get("bond")["stroke"]["width"],this.config.get("bond")["stroke"]["color"]);var bondFill=new goog.graphics.SolidFill(this.config.get("bond")["fill"]["color"]);var bondPath=new goog.graphics.Path;goog.array.forEach(molecule.bonds,function(bond){this.bondRendererFactory.get(bond).render(bond,trans,bondPath)},this);this.graphics.drawPath(bondPath,
bondStroke,bondFill,molecule.group);goog.array.forEach(molecule.atoms,function(atom){this.atomRenderer.render(atom,trans,molecule.group)},this)};kemia.view.MoleculeRenderer.prototype.highlightOn=function(molecule,opt_group){if(!opt_group)opt_group=this.graphics.createGroup();goog.array.forEach(molecule.atoms,function(atom){this.atomRenderer.highlightOn(atom,opt_group)},this);return opt_group};kemia.view.MoleculeRenderer.defaultConfig={bond:{stroke:{width:2,color:"black"},fill:{color:"black"}},margin:4};goog.provide("goog.dom.TagName");
goog.dom.TagName={A:"A",ABBR:"ABBR",ACRONYM:"ACRONYM",ADDRESS:"ADDRESS",APPLET:"APPLET",AREA:"AREA",B:"B",BASE:"BASE",BASEFONT:"BASEFONT",BDO:"BDO",BIG:"BIG",BLOCKQUOTE:"BLOCKQUOTE",BODY:"BODY",BR:"BR",BUTTON:"BUTTON",CAPTION:"CAPTION",CENTER:"CENTER",CITE:"CITE",CODE:"CODE",COL:"COL",COLGROUP:"COLGROUP",DD:"DD",DEL:"DEL",DFN:"DFN",DIR:"DIR",DIV:"DIV",DL:"DL",DT:"DT",EM:"EM",FIELDSET:"FIELDSET",FONT:"FONT",FORM:"FORM",FRAME:"FRAME",FRAMESET:"FRAMESET",H1:"H1",H2:"H2",H3:"H3",H4:"H4",H5:"H5",H6:"H6",
HEAD:"HEAD",HR:"HR",HTML:"HTML",I:"I",IFRAME:"IFRAME",IMG:"IMG",INPUT:"INPUT",INS:"INS",ISINDEX:"ISINDEX",KBD:"KBD",LABEL:"LABEL",LEGEND:"LEGEND",LI:"LI",LINK:"LINK",MAP:"MAP",MENU:"MENU",META:"META",NOFRAMES:"NOFRAMES",NOSCRIPT:"NOSCRIPT",OBJECT:"OBJECT",OL:"OL",OPTGROUP:"OPTGROUP",OPTION:"OPTION",P:"P",PARAM:"PARAM",PRE:"PRE",Q:"Q",S:"S",SAMP:"SAMP",SCRIPT:"SCRIPT",SELECT:"SELECT",SMALL:"SMALL",SPAN:"SPAN",STRIKE:"STRIKE",STRONG:"STRONG",STYLE:"STYLE",SUB:"SUB",SUP:"SUP",TABLE:"TABLE",TBODY:"TBODY",
TD:"TD",TEXTAREA:"TEXTAREA",TFOOT:"TFOOT",TH:"TH",THEAD:"THEAD",TITLE:"TITLE",TR:"TR",TT:"TT",U:"U",UL:"UL",VAR:"VAR"};goog.provide("goog.dom.classes");goog.require("goog.array");goog.dom.classes.set=function(element,className){element.className=className};goog.dom.classes.get=function(element){var className=element.className;return className&&typeof className.split=="function"?className.split(/\s+/):[]};goog.dom.classes.add=function(element,var_args){var classes=goog.dom.classes.get(element);var args=goog.array.slice(arguments,1);var b=goog.dom.classes.add_(classes,args);element.className=classes.join(" ");return b};
goog.dom.classes.remove=function(element,var_args){var classes=goog.dom.classes.get(element);var args=goog.array.slice(arguments,1);var b=goog.dom.classes.remove_(classes,args);element.className=classes.join(" ");return b};goog.dom.classes.add_=function(classes,args){var rv=0;for(var i=0;i<args.length;i++)if(!goog.array.contains(classes,args[i])){classes.push(args[i]);rv++}return rv==args.length};
goog.dom.classes.remove_=function(classes,args){var rv=0;for(var i=0;i<classes.length;i++)if(goog.array.contains(args,classes[i])){goog.array.splice(classes,i--,1);rv++}return rv==args.length};goog.dom.classes.swap=function(element,fromClass,toClass){var classes=goog.dom.classes.get(element);var removed=false;for(var i=0;i<classes.length;i++)if(classes[i]==fromClass){goog.array.splice(classes,i--,1);removed=true}if(removed){classes.push(toClass);element.className=classes.join(" ")}return removed};
goog.dom.classes.addRemove=function(element,classesToRemove,classesToAdd){var classes=goog.dom.classes.get(element);if(goog.isString(classesToRemove))goog.array.remove(classes,classesToRemove);else if(goog.isArray(classesToRemove))goog.dom.classes.remove_(classes,classesToRemove);if(goog.isString(classesToAdd)&&!goog.array.contains(classes,classesToAdd))classes.push(classesToAdd);else if(goog.isArray(classesToAdd))goog.dom.classes.add_(classes,classesToAdd);element.className=classes.join(" ")};
goog.dom.classes.has=function(element,className){return goog.array.contains(goog.dom.classes.get(element),className)};goog.dom.classes.enable=function(element,className,enabled){if(enabled)goog.dom.classes.add(element,className);else goog.dom.classes.remove(element,className)};goog.dom.classes.toggle=function(element,className){var add=!goog.dom.classes.has(element,className);goog.dom.classes.enable(element,className,add);return add};goog.provide("goog.dom");goog.provide("goog.dom.DomHelper");goog.provide("goog.dom.NodeType");goog.require("goog.array");goog.require("goog.dom.TagName");goog.require("goog.dom.classes");goog.require("goog.math.Coordinate");goog.require("goog.math.Size");goog.require("goog.object");goog.require("goog.string");goog.require("goog.userAgent");goog.dom.ASSUME_QUIRKS_MODE=false;goog.dom.ASSUME_STANDARDS_MODE=false;goog.dom.COMPAT_MODE_KNOWN_=goog.dom.ASSUME_QUIRKS_MODE||goog.dom.ASSUME_STANDARDS_MODE;
goog.dom.NodeType={ELEMENT:1,ATTRIBUTE:2,TEXT:3,CDATA_SECTION:4,ENTITY_REFERENCE:5,ENTITY:6,PROCESSING_INSTRUCTION:7,COMMENT:8,DOCUMENT:9,DOCUMENT_TYPE:10,DOCUMENT_FRAGMENT:11,NOTATION:12};goog.dom.getDomHelper=function(opt_element){return opt_element?new goog.dom.DomHelper(goog.dom.getOwnerDocument(opt_element)):goog.dom.defaultDomHelper_||(goog.dom.defaultDomHelper_=new goog.dom.DomHelper)};goog.dom.defaultDomHelper_;goog.dom.getDocument=function(){return document};
goog.dom.getElement=function(element){return goog.isString(element)?document.getElementById(element):element};goog.dom.$=goog.dom.getElement;goog.dom.getElementsByTagNameAndClass=function(opt_tag,opt_class,opt_el){return goog.dom.getElementsByTagNameAndClass_(document,opt_tag,opt_class,opt_el)};
goog.dom.getElementsByTagNameAndClass_=function(doc,opt_tag,opt_class,opt_el){var parent=opt_el||doc;var tagName=opt_tag&&opt_tag!="*"?opt_tag.toUpperCase():"";if(parent.querySelectorAll&&(tagName||opt_class)&&(!goog.userAgent.WEBKIT||goog.dom.isCss1CompatMode_(doc)||goog.userAgent.isVersion("528"))){var query=tagName+(opt_class?"."+opt_class:"");return parent.querySelectorAll(query)}if(opt_class&&parent.getElementsByClassName){var els=parent.getElementsByClassName(opt_class);if(tagName){var arrayLike=
{};var len=0;for(var i=0,el;el=els[i];i++)if(tagName==el.nodeName)arrayLike[len++]=el;arrayLike.length=len;return arrayLike}else return els}var els=parent.getElementsByTagName(tagName||"*");if(opt_class){var arrayLike={};var len=0;for(var i=0,el;el=els[i];i++){var className=el.className;if(typeof className.split=="function"&&goog.array.contains(className.split(/\s+/),opt_class))arrayLike[len++]=el}arrayLike.length=len;return arrayLike}else return els};goog.dom.$$=goog.dom.getElementsByTagNameAndClass;
goog.dom.setProperties=function(element,properties){goog.object.forEach(properties,function(val,key){if(key=="style")element.style.cssText=val;else if(key=="class")element.className=val;else if(key=="for")element.htmlFor=val;else if(key in goog.dom.DIRECT_ATTRIBUTE_MAP_)element.setAttribute(goog.dom.DIRECT_ATTRIBUTE_MAP_[key],val);else element[key]=val})};
goog.dom.DIRECT_ATTRIBUTE_MAP_={cellpadding:"cellPadding",cellspacing:"cellSpacing",colspan:"colSpan",rowspan:"rowSpan",valign:"vAlign",height:"height",width:"width",usemap:"useMap",frameborder:"frameBorder",type:"type"};goog.dom.getViewportSize=function(opt_window){return goog.dom.getViewportSize_(opt_window||window)};
goog.dom.getViewportSize_=function(win){var doc=win.document;if(goog.userAgent.WEBKIT&&!goog.userAgent.isVersion("500")&&!goog.userAgent.MOBILE){if(typeof win.innerHeight=="undefined")win=window;var innerHeight=win.innerHeight;var scrollHeight=win.document.documentElement.scrollHeight;if(win==win.top)if(scrollHeight<innerHeight)innerHeight-=15;return new goog.math.Size(win.innerWidth,innerHeight)}var el=goog.dom.isCss1CompatMode_(doc)&&(!goog.userAgent.OPERA||goog.userAgent.OPERA&&goog.userAgent.isVersion("9.50"))?
doc.documentElement:doc.body;return new goog.math.Size(el.clientWidth,el.clientHeight)};goog.dom.getDocumentHeight=function(){return goog.dom.getDocumentHeight_(window)};
goog.dom.getDocumentHeight_=function(win){var doc=win.document;var height=0;if(doc){var vh=goog.dom.getViewportSize_(win).height;var body=doc.body;var docEl=doc.documentElement;if(goog.dom.isCss1CompatMode_(doc)&&docEl.scrollHeight)height=docEl.scrollHeight!=vh?docEl.scrollHeight:docEl.offsetHeight;else{var sh=docEl.scrollHeight;var oh=docEl.offsetHeight;if(docEl.clientHeight!=oh){sh=body.scrollHeight;oh=body.offsetHeight}if(sh>vh)height=sh>oh?sh:oh;else height=sh<oh?sh:oh}}return height};
goog.dom.getPageScroll=function(opt_window){var win=opt_window||goog.global||window;return goog.dom.getDomHelper(win.document).getDocumentScroll()};goog.dom.getDocumentScroll=function(){return goog.dom.getDocumentScroll_(document)};goog.dom.getDocumentScroll_=function(doc){var el=goog.dom.getDocumentScrollElement_(doc);return new goog.math.Coordinate(el.scrollLeft,el.scrollTop)};goog.dom.getDocumentScrollElement=function(){return goog.dom.getDocumentScrollElement_(document)};
goog.dom.getDocumentScrollElement_=function(doc){return!goog.userAgent.WEBKIT&&goog.dom.isCss1CompatMode_(doc)?doc.documentElement:doc.body};goog.dom.getWindow=function(opt_doc){return opt_doc?goog.dom.getWindow_(opt_doc):window};goog.dom.getWindow_=function(doc){return doc.parentWindow||doc.defaultView};goog.dom.createDom=function(tagName,opt_attributes,var_args){return goog.dom.createDom_(document,arguments)};
goog.dom.createDom_=function(doc,args){var tagName=args[0];var attributes=args[1];if(goog.userAgent.IE&&attributes&&(attributes.name||attributes.type)){var tagNameArr=["<",tagName];if(attributes.name)tagNameArr.push(' name="',goog.string.htmlEscape(attributes.name),'"');if(attributes.type){tagNameArr.push(' type="',goog.string.htmlEscape(attributes.type),'"');attributes=goog.cloneObject(attributes);delete attributes.type}tagNameArr.push(">");tagName=tagNameArr.join("")}var element=doc.createElement(tagName);
if(attributes)if(goog.isString(attributes))element.className=attributes;else goog.dom.setProperties(element,attributes);if(args.length>2){var childHandler=function(child){if(child)element.appendChild(goog.isString(child)?doc.createTextNode(child):child)};for(var i=2;i<args.length;i++){var arg=args[i];if(goog.isArrayLike(arg)&&!goog.dom.isNodeLike(arg))goog.array.forEach(goog.dom.isNodeList(arg)?goog.array.clone(arg):arg,childHandler);else childHandler(arg)}}return element};goog.dom.$dom=goog.dom.createDom;
goog.dom.createElement=function(name){return document.createElement(name)};goog.dom.createTextNode=function(content){return document.createTextNode(content)};goog.dom.createTable=function(rows,columns,opt_fillWithNbsp){return goog.dom.createTable_(document,rows,columns,!!opt_fillWithNbsp)};
goog.dom.createTable_=function(doc,rows,columns,fillWithNbsp){var rowHtml=["<tr>"];for(var i=0;i<columns;i++)rowHtml.push(fillWithNbsp?"<td>&nbsp;</td>":"<td></td>");rowHtml.push("</tr>");rowHtml=rowHtml.join("");var totalHtml=["<table>"];for(i=0;i<rows;i++)totalHtml.push(rowHtml);totalHtml.push("</table>");var elem=doc.createElement(goog.dom.TagName.DIV);elem.innerHTML=totalHtml.join("");return elem.removeChild(elem.firstChild)};
goog.dom.htmlToDocumentFragment=function(htmlString){return goog.dom.htmlToDocumentFragment_(document,htmlString)};goog.dom.htmlToDocumentFragment_=function(doc,htmlString){var tempDiv=doc.createElement("div");tempDiv.innerHTML=htmlString;if(tempDiv.childNodes.length==1)return tempDiv.removeChild(tempDiv.firstChild);else{var fragment=doc.createDocumentFragment();while(tempDiv.firstChild)fragment.appendChild(tempDiv.firstChild);return fragment}};
goog.dom.getCompatMode=function(){return goog.dom.isCss1CompatMode()?"CSS1Compat":"BackCompat"};goog.dom.isCss1CompatMode=function(){return goog.dom.isCss1CompatMode_(document)};goog.dom.isCss1CompatMode_=function(doc){if(goog.dom.COMPAT_MODE_KNOWN_)return goog.dom.ASSUME_STANDARDS_MODE;return doc.compatMode=="CSS1Compat"};goog.dom.canHaveChildren=function(node){if(node.nodeType!=goog.dom.NodeType.ELEMENT)return false;if("canHaveChildren"in node)return node.canHaveChildren;switch(node.tagName){case goog.dom.TagName.APPLET:case goog.dom.TagName.AREA:case goog.dom.TagName.BASE:case goog.dom.TagName.BR:case goog.dom.TagName.COL:case goog.dom.TagName.FRAME:case goog.dom.TagName.HR:case goog.dom.TagName.IMG:case goog.dom.TagName.INPUT:case goog.dom.TagName.IFRAME:case goog.dom.TagName.ISINDEX:case goog.dom.TagName.LINK:case goog.dom.TagName.NOFRAMES:case goog.dom.TagName.NOSCRIPT:case goog.dom.TagName.META:case goog.dom.TagName.OBJECT:case goog.dom.TagName.PARAM:case goog.dom.TagName.SCRIPT:case goog.dom.TagName.STYLE:return false}return true};
goog.dom.appendChild=function(parent,child){parent.appendChild(child)};goog.dom.removeChildren=function(node){var child;while(child=node.firstChild)node.removeChild(child)};goog.dom.insertSiblingBefore=function(newNode,refNode){if(refNode.parentNode)refNode.parentNode.insertBefore(newNode,refNode)};goog.dom.insertSiblingAfter=function(newNode,refNode){if(refNode.parentNode)refNode.parentNode.insertBefore(newNode,refNode.nextSibling)};
goog.dom.removeNode=function(node){return node&&node.parentNode?node.parentNode.removeChild(node):null};goog.dom.replaceNode=function(newNode,oldNode){var parent=oldNode.parentNode;if(parent)parent.replaceChild(newNode,oldNode)};goog.dom.flattenElement=function(element){var child,parent=element.parentNode;if(parent&&parent.nodeType!=goog.dom.NodeType.DOCUMENT_FRAGMENT)if(element.removeNode)return element.removeNode(false);else{while(child=element.firstChild)parent.insertBefore(child,element);return goog.dom.removeNode(element)}};
goog.dom.getFirstElementChild=function(node){return goog.dom.getNextElementNode_(node.firstChild,true)};goog.dom.getLastElementChild=function(node){return goog.dom.getNextElementNode_(node.lastChild,false)};goog.dom.getNextElementSibling=function(node){return goog.dom.getNextElementNode_(node.nextSibling,true)};goog.dom.getPreviousElementSibling=function(node){return goog.dom.getNextElementNode_(node.previousSibling,false)};
goog.dom.getNextElementNode_=function(node,forward){while(node&&node.nodeType!=goog.dom.NodeType.ELEMENT)node=forward?node.nextSibling:node.previousSibling;return node};goog.dom.getNextNode=function(node){if(!node)return null;if(node.firstChild)return node.firstChild;while(node&&!node.nextSibling)node=node.parentNode;return node?node.nextSibling:null};
goog.dom.getPreviousNode=function(node){if(!node)return null;if(!node.previousSibling)return node.parentNode;node=node.previousSibling;while(node&&node.lastChild)node=node.lastChild;return node};goog.dom.isNodeLike=function(obj){return goog.isObject(obj)&&obj.nodeType>0};
goog.dom.contains=function(parent,descendant){if(parent.contains&&descendant.nodeType==goog.dom.NodeType.ELEMENT)return parent==descendant||parent.contains(descendant);if(typeof parent.compareDocumentPosition!="undefined")return parent==descendant||Boolean(parent.compareDocumentPosition(descendant)&16);while(descendant&&parent!=descendant)descendant=descendant.parentNode;return descendant==parent};
goog.dom.compareNodeOrder=function(node1,node2){if(node1==node2)return 0;if(node1.compareDocumentPosition)return node1.compareDocumentPosition(node2)&2?1:-1;if("sourceIndex"in node1||node1.parentNode&&"sourceIndex"in node1.parentNode){var isElement1=node1.nodeType==goog.dom.NodeType.ELEMENT;var isElement2=node2.nodeType==goog.dom.NodeType.ELEMENT;if(isElement1&&isElement2)return node1.sourceIndex-node2.sourceIndex;else{var parent1=node1.parentNode;var parent2=node2.parentNode;if(parent1==parent2)return goog.dom.compareSiblingOrder_(node1,
node2);if(!isElement1&&goog.dom.contains(parent1,node2))return-1*goog.dom.compareParentsDescendantNodeIe_(node1,node2);if(!isElement2&&goog.dom.contains(parent2,node1))return goog.dom.compareParentsDescendantNodeIe_(node2,node1);return(isElement1?node1.sourceIndex:parent1.sourceIndex)-(isElement2?node2.sourceIndex:parent2.sourceIndex)}}var doc=goog.dom.getOwnerDocument(node1);var range1,range2;range1=doc.createRange();range1.selectNode(node1);range1.collapse(true);range2=doc.createRange();range2.selectNode(node2);
range2.collapse(true);return range1.compareBoundaryPoints(goog.global["Range"].START_TO_END,range2)};goog.dom.compareParentsDescendantNodeIe_=function(textNode,node){var parent=textNode.parentNode;if(parent==node)return-1;var sibling=node;while(sibling.parentNode!=parent)sibling=sibling.parentNode;return goog.dom.compareSiblingOrder_(sibling,textNode)};goog.dom.compareSiblingOrder_=function(node1,node2){var s=node2;while(s=s.previousSibling)if(s==node1)return-1;return 1};
goog.dom.findCommonAncestor=function(var_args){var i,count=arguments.length;if(!count)return null;else if(count==1)return arguments[0];var paths=[];var minLength=Infinity;for(i=0;i<count;i++){var ancestors=[];var node=arguments[i];while(node){ancestors.unshift(node);node=node.parentNode}paths.push(ancestors);minLength=Math.min(minLength,ancestors.length)}var output=null;for(i=0;i<minLength;i++){var first=paths[0][i];for(var j=1;j<count;j++)if(first!=paths[j][i])return output;output=first}return output};
goog.dom.getOwnerDocument=function(node){return node.nodeType==goog.dom.NodeType.DOCUMENT?node:node.ownerDocument||node.document};goog.dom.getFrameContentDocument=function(frame){var doc;if(goog.userAgent.WEBKIT)doc=frame.document||frame.contentWindow.document;else doc=frame.contentDocument||frame.contentWindow.document;return doc};goog.dom.getFrameContentWindow=function(frame){return frame.contentWindow||goog.dom.getWindow_(goog.dom.getFrameContentDocument(frame))};
goog.dom.setTextContent=function(element,text){if("textContent"in element)element.textContent=text;else if(element.firstChild&&element.firstChild.nodeType==goog.dom.NodeType.TEXT){while(element.lastChild!=element.firstChild)element.removeChild(element.lastChild);element.firstChild.data=text}else{goog.dom.removeChildren(element);var doc=goog.dom.getOwnerDocument(element);element.appendChild(doc.createTextNode(text))}};
goog.dom.getOuterHtml=function(element){if("outerHTML"in element)return element.outerHTML;else{var doc=goog.dom.getOwnerDocument(element);var div=doc.createElement("div");div.appendChild(element.cloneNode(true));return div.innerHTML}};goog.dom.findNode=function(root,p){var rv=[];var found=goog.dom.findNodes_(root,p,rv,true);return found?rv[0]:undefined};goog.dom.findNodes=function(root,p){var rv=[];goog.dom.findNodes_(root,p,rv,false);return rv};
goog.dom.findNodes_=function(root,p,rv,findOne){if(root!=null)for(var i=0,child;child=root.childNodes[i];i++){if(p(child)){rv.push(child);if(findOne)return true}if(goog.dom.findNodes_(child,p,rv,findOne))return true}return false};goog.dom.TAGS_TO_IGNORE_={SCRIPT:1,STYLE:1,HEAD:1,IFRAME:1,OBJECT:1};goog.dom.PREDEFINED_TAG_VALUES_={IMG:" ",BR:"\n"};
goog.dom.isFocusableTabIndex=function(element){var attrNode=element.getAttributeNode("tabindex");if(attrNode&&attrNode.specified){var index=element.tabIndex;return goog.isNumber(index)&&index>=0}return false};goog.dom.setFocusableTabIndex=function(element,enable){if(enable)element.tabIndex=0;else element.removeAttribute("tabIndex")};
goog.dom.getTextContent=function(node){var textContent;if(goog.userAgent.IE&&"innerText"in node)textContent=goog.string.canonicalizeNewlines(node.innerText);else{var buf=[];goog.dom.getTextContent_(node,buf,true);textContent=buf.join("")}textContent=textContent.replace(/\xAD/g,"");textContent=textContent.replace(/ +/g," ");if(textContent!=" ")textContent=textContent.replace(/^\s*/,"");return textContent};
goog.dom.getRawTextContent=function(node){var buf=[];goog.dom.getTextContent_(node,buf,false);return buf.join("")};
goog.dom.getTextContent_=function(node,buf,normalizeWhitespace){if(node.nodeName in goog.dom.TAGS_TO_IGNORE_);else if(node.nodeType==goog.dom.NodeType.TEXT)if(normalizeWhitespace)buf.push(String(node.nodeValue).replace(/(\r\n|\r|\n)/g,""));else buf.push(node.nodeValue);else if(node.nodeName in goog.dom.PREDEFINED_TAG_VALUES_)buf.push(goog.dom.PREDEFINED_TAG_VALUES_[node.nodeName]);else{var child=node.firstChild;while(child){goog.dom.getTextContent_(child,buf,normalizeWhitespace);child=child.nextSibling}}};
goog.dom.getNodeTextLength=function(node){return goog.dom.getTextContent(node).length};goog.dom.getNodeTextOffset=function(node,opt_offsetParent){var root=opt_offsetParent||goog.dom.getOwnerDocument(node).body;var buf=[];while(node&&node!=root){var cur=node;while(cur=cur.previousSibling)buf.unshift(goog.dom.getTextContent(cur));node=node.parentNode}return goog.string.trimLeft(buf.join("")).replace(/ +/g," ").length};
goog.dom.getNodeAtOffset=function(parent,offset,opt_result){var stack=[parent],pos=0,cur;while(stack.length>0&&pos<offset){cur=stack.pop();if(cur.nodeName in goog.dom.TAGS_TO_IGNORE_);else if(cur.nodeType==goog.dom.NodeType.TEXT){var text=cur.nodeValue.replace(/(\r\n|\r|\n)/g,"").replace(/ +/g," ");pos+=text.length}else if(cur.nodeName in goog.dom.PREDEFINED_TAG_VALUES_)pos+=goog.dom.PREDEFINED_TAG_VALUES_[cur.nodeName].length;else for(var i=cur.childNodes.length-1;i>=0;i--)stack.push(cur.childNodes[i])}if(goog.isObject(opt_result)){opt_result.remainder=
cur?cur.nodeValue.length+offset-pos-1:0;opt_result.node=cur}return cur};goog.dom.isNodeList=function(val){if(val&&typeof val.length=="number")if(goog.isObject(val))return typeof val.item=="function"||typeof val.item=="string";else if(goog.isFunction(val))return typeof val.item=="function";return false};
goog.dom.getAncestorByTagNameAndClass=function(element,opt_tag,opt_class){var tagName=opt_tag?opt_tag.toUpperCase():null;return goog.dom.getAncestor(element,function(node){return(!tagName||node.nodeName==tagName)&&(!opt_class||goog.dom.classes.has(node,opt_class))},true)};
goog.dom.getAncestor=function(element,matcher,opt_includeNode,opt_maxSearchSteps){if(!opt_includeNode)element=element.parentNode;var ignoreSearchSteps=opt_maxSearchSteps==null;var steps=0;while(element&&(ignoreSearchSteps||steps<=opt_maxSearchSteps)){if(matcher(element))return element;element=element.parentNode;steps++}return null};goog.dom.DomHelper=function(opt_document){this.document_=opt_document||goog.global.document||document};goog.dom.DomHelper.prototype.getDomHelper=goog.dom.getDomHelper;
goog.dom.DomHelper.prototype.setDocument=function(document){this.document_=document};goog.dom.DomHelper.prototype.getDocument=function(){return this.document_};goog.dom.DomHelper.prototype.getElement=function(element){if(goog.isString(element))return this.document_.getElementById(element);else return element};goog.dom.DomHelper.prototype.$=goog.dom.DomHelper.prototype.getElement;
goog.dom.DomHelper.prototype.getElementsByTagNameAndClass=function(opt_tag,opt_class,opt_el){return goog.dom.getElementsByTagNameAndClass_(this.document_,opt_tag,opt_class,opt_el)};goog.dom.DomHelper.prototype.$$=goog.dom.DomHelper.prototype.getElementsByTagNameAndClass;goog.dom.DomHelper.prototype.setProperties=goog.dom.setProperties;goog.dom.DomHelper.prototype.getViewportSize=function(opt_window){return goog.dom.getViewportSize(opt_window||this.getWindow())};
goog.dom.DomHelper.prototype.getDocumentHeight=function(){return goog.dom.getDocumentHeight_(this.getWindow())};goog.dom.DomHelper.prototype.createDom=function(tagName,opt_attributes,var_args){return goog.dom.createDom_(this.document_,arguments)};goog.dom.DomHelper.prototype.$dom=goog.dom.DomHelper.prototype.createDom;goog.dom.DomHelper.prototype.createElement=function(name){return this.document_.createElement(name)};goog.dom.DomHelper.prototype.createTextNode=function(content){return this.document_.createTextNode(content)};
goog.dom.DomHelper.prototype.createTable=function(rows,columns,opt_fillWithNbsp){return goog.dom.createTable_(this.document_,rows,columns,!!opt_fillWithNbsp)};goog.dom.DomHelper.prototype.htmlToDocumentFragment=function(htmlString){return goog.dom.htmlToDocumentFragment_(this.document_,htmlString)};goog.dom.DomHelper.prototype.getCompatMode=function(){return this.isCss1CompatMode()?"CSS1Compat":"BackCompat"};goog.dom.DomHelper.prototype.isCss1CompatMode=function(){return goog.dom.isCss1CompatMode_(this.document_)};
goog.dom.DomHelper.prototype.getWindow=function(){return goog.dom.getWindow_(this.document_)};goog.dom.DomHelper.prototype.getDocumentScrollElement=function(){return goog.dom.getDocumentScrollElement_(this.document_)};goog.dom.DomHelper.prototype.getDocumentScroll=function(){return goog.dom.getDocumentScroll_(this.document_)};goog.dom.DomHelper.prototype.appendChild=goog.dom.appendChild;goog.dom.DomHelper.prototype.removeChildren=goog.dom.removeChildren;
goog.dom.DomHelper.prototype.insertSiblingBefore=goog.dom.insertSiblingBefore;goog.dom.DomHelper.prototype.insertSiblingAfter=goog.dom.insertSiblingAfter;goog.dom.DomHelper.prototype.removeNode=goog.dom.removeNode;goog.dom.DomHelper.prototype.replaceNode=goog.dom.replaceNode;goog.dom.DomHelper.prototype.flattenElement=goog.dom.flattenElement;goog.dom.DomHelper.prototype.getFirstElementChild=goog.dom.getFirstElementChild;goog.dom.DomHelper.prototype.getLastElementChild=goog.dom.getLastElementChild;
goog.dom.DomHelper.prototype.getNextElementSibling=goog.dom.getNextElementSibling;goog.dom.DomHelper.prototype.getPreviousElementSibling=goog.dom.getPreviousElementSibling;goog.dom.DomHelper.prototype.getNextNode=goog.dom.getNextNode;goog.dom.DomHelper.prototype.getPreviousNode=goog.dom.getPreviousNode;goog.dom.DomHelper.prototype.isNodeLike=goog.dom.isNodeLike;goog.dom.DomHelper.prototype.contains=goog.dom.contains;goog.dom.DomHelper.prototype.getOwnerDocument=goog.dom.getOwnerDocument;
goog.dom.DomHelper.prototype.getFrameContentDocument=goog.dom.getFrameContentDocument;goog.dom.DomHelper.prototype.getFrameContentWindow=goog.dom.getFrameContentWindow;goog.dom.DomHelper.prototype.setTextContent=goog.dom.setTextContent;goog.dom.DomHelper.prototype.findNode=goog.dom.findNode;goog.dom.DomHelper.prototype.findNodes=goog.dom.findNodes;goog.dom.DomHelper.prototype.getTextContent=goog.dom.getTextContent;goog.dom.DomHelper.prototype.getNodeTextLength=goog.dom.getNodeTextLength;
goog.dom.DomHelper.prototype.getNodeTextOffset=goog.dom.getNodeTextOffset;goog.dom.DomHelper.prototype.getAncestorByTagNameAndClass=goog.dom.getAncestorByTagNameAndClass;goog.dom.DomHelper.prototype.getAncestor=goog.dom.getAncestor;goog.provide("goog.graphics.Path");goog.provide("goog.graphics.Path.Segment");goog.require("goog.array");goog.require("goog.math");goog.graphics.Path=function(){this.segments_=[];this.count_=[];this.arguments_=[]};goog.graphics.Path.prototype.closePoint_=null;goog.graphics.Path.prototype.currentPoint_=null;goog.graphics.Path.prototype.simple_=true;goog.graphics.Path.Segment={MOVETO:0,LINETO:1,CURVETO:2,ARCTO:3,CLOSE:4};
goog.graphics.Path.segmentArgCounts_=function(){var counts=[];counts[goog.graphics.Path.Segment.MOVETO]=2;counts[goog.graphics.Path.Segment.LINETO]=2;counts[goog.graphics.Path.Segment.CURVETO]=6;counts[goog.graphics.Path.Segment.ARCTO]=6;counts[goog.graphics.Path.Segment.CLOSE]=0;return counts}();goog.graphics.Path.getSegmentCount=function(segment){return goog.graphics.Path.segmentArgCounts_[segment]};
goog.graphics.Path.prototype.appendPath=function(path){if(path.currentPoint_){Array.prototype.push.apply(this.segments_,path.segments_);Array.prototype.push.apply(this.count_,path.count_);Array.prototype.push.apply(this.arguments_,path.arguments_);this.currentPoint_=path.currentPoint_.concat();this.closePoint_=path.closePoint_.concat();this.simple_=this.simple_&&path.simple_}return this};
goog.graphics.Path.prototype.clear=function(){this.segments_.length=0;this.count_.length=0;this.arguments_.length=0;delete this.closePoint_;delete this.currentPoint_;delete this.simple_;return this};goog.graphics.Path.prototype.moveTo=function(x,y){if(goog.array.peek(this.segments_)==goog.graphics.Path.Segment.MOVETO)this.arguments_.length-=2;else{this.segments_.push(goog.graphics.Path.Segment.MOVETO);this.count_.push(1)}this.arguments_.push(x,y);this.currentPoint_=this.closePoint_=[x,y];return this};
goog.graphics.Path.prototype.lineTo=function(var_args){var lastSegment=goog.array.peek(this.segments_);if(lastSegment==null)throw Error("Path cannot start with lineTo");if(lastSegment!=goog.graphics.Path.Segment.LINETO){this.segments_.push(goog.graphics.Path.Segment.LINETO);this.count_.push(0)}for(var i=0;i<arguments.length;i+=2){var x=arguments[i];var y=arguments[i+1];this.arguments_.push(x,y)}this.count_[this.count_.length-1]+=i/2;this.currentPoint_=[x,y];return this};
goog.graphics.Path.prototype.curveTo=function(var_args){var lastSegment=goog.array.peek(this.segments_);if(lastSegment==null)throw Error("Path cannot start with curve");if(lastSegment!=goog.graphics.Path.Segment.CURVETO){this.segments_.push(goog.graphics.Path.Segment.CURVETO);this.count_.push(0)}for(var i=0;i<arguments.length;i+=6){var x=arguments[i+4];var y=arguments[i+5];this.arguments_.push(arguments[i],arguments[i+1],arguments[i+2],arguments[i+3],x,y)}this.count_[this.count_.length-1]+=i/6;this.currentPoint_=
[x,y];return this};goog.graphics.Path.prototype.close=function(){var lastSegment=goog.array.peek(this.segments_);if(lastSegment==null)throw Error("Path cannot start with close");if(lastSegment!=goog.graphics.Path.Segment.CLOSE){this.segments_.push(goog.graphics.Path.Segment.CLOSE);this.count_.push(1);this.currentPoint_=this.closePoint_}return this};
goog.graphics.Path.prototype.arc=function(cx,cy,rx,ry,fromAngle,extent,connect){var startX=cx+goog.math.angleDx(fromAngle,rx);var startY=cy+goog.math.angleDy(fromAngle,ry);if(connect){if(!this.currentPoint_||startX!=this.currentPoint_[0]||startY!=this.currentPoint_[1])this.lineTo(startX,startY)}else this.moveTo(startX,startY);return this.arcTo(rx,ry,fromAngle,extent)};
goog.graphics.Path.prototype.arcTo=function(rx,ry,fromAngle,extent){var cx=this.currentPoint_[0]-goog.math.angleDx(fromAngle,rx);var cy=this.currentPoint_[1]-goog.math.angleDy(fromAngle,ry);var ex=cx+goog.math.angleDx(fromAngle+extent,rx);var ey=cy+goog.math.angleDy(fromAngle+extent,ry);this.segments_.push(goog.graphics.Path.Segment.ARCTO);this.count_.push(1);this.arguments_.push(rx,ry,fromAngle,extent,ex,ey);this.simple_=false;this.currentPoint_=[ex,ey];return this};
goog.graphics.Path.prototype.arcToAsCurves=function(rx,ry,fromAngle,extent){var cx=this.currentPoint_[0]-goog.math.angleDx(fromAngle,rx);var cy=this.currentPoint_[1]-goog.math.angleDy(fromAngle,ry);var extentRad=goog.math.toRadians(extent);var arcSegs=Math.ceil(Math.abs(extentRad)/Math.PI*2);var inc=extentRad/arcSegs;var angle=goog.math.toRadians(fromAngle);for(var j=0;j<arcSegs;j++){var relX=Math.cos(angle);var relY=Math.sin(angle);var z=4/3*Math.sin(inc/2)/(1+Math.cos(inc/2));var c0=cx+(relX-z*
relY)*rx;var c1=cy+(relY+z*relX)*ry;angle+=inc;relX=Math.cos(angle);relY=Math.sin(angle);this.curveTo(c0,c1,cx+(relX+z*relY)*rx,cy+(relY-z*relX)*ry,cx+relX*rx,cy+relY*ry)}return this};goog.graphics.Path.prototype.forEachSegment=function(callback){var points=this.arguments_;var index=0;for(var i=0,length=this.segments_.length;i<length;i++){var seg=this.segments_[i];var n=goog.graphics.Path.segmentArgCounts_[seg]*this.count_[i];callback(seg,points.slice(index,index+n));index+=n}};
goog.graphics.Path.prototype.getCurrentPoint=function(){return this.currentPoint_&&this.currentPoint_.concat()};goog.graphics.Path.prototype.clone=function(){var path=new this.constructor;path.segments_=this.segments_.concat();path.count_=this.count_.concat();path.arguments_=this.arguments_.concat();path.closePoint_=this.closePoint_&&this.closePoint_.concat();path.currentPoint_=this.currentPoint_&&this.currentPoint_.concat();path.simple_=this.simple_;return path};
goog.graphics.Path.prototype.isSimple=function(){return this.simple_};
goog.graphics.Path.simplifySegmentMap_=function(){var map={};map[goog.graphics.Path.Segment.MOVETO]=goog.graphics.Path.prototype.moveTo;map[goog.graphics.Path.Segment.LINETO]=goog.graphics.Path.prototype.lineTo;map[goog.graphics.Path.Segment.CLOSE]=goog.graphics.Path.prototype.close;map[goog.graphics.Path.Segment.CURVETO]=goog.graphics.Path.prototype.curveTo;map[goog.graphics.Path.Segment.ARCTO]=goog.graphics.Path.prototype.arcToAsCurves;return map}();
goog.graphics.Path.createSimplifiedPath=function(src){if(src.isSimple())return src.clone();var path=new goog.graphics.Path;src.forEachSegment(function(segment,args){goog.graphics.Path.simplifySegmentMap_[segment].apply(path,args)});return path};goog.graphics.Path.prototype.createTransformedPath=function(tx){var path=goog.graphics.Path.createSimplifiedPath(this);path.transform(tx);return path};
goog.graphics.Path.prototype.transform=function(tx){if(!this.isSimple())throw Error("Non-simple path");tx.transform(this.arguments_,0,this.arguments_,0,this.arguments_.length/2);if(this.closePoint_)tx.transform(this.closePoint_,0,this.closePoint_,0,1);if(this.currentPoint_&&this.closePoint_!=this.currentPoint_)tx.transform(this.currentPoint_,0,this.currentPoint_,0,1);return this};goog.graphics.Path.prototype.isEmpty=function(){return this.segments_.length==0};goog.provide("goog.style");goog.require("goog.array");goog.require("goog.dom");goog.require("goog.math.Box");goog.require("goog.math.Coordinate");goog.require("goog.math.Rect");goog.require("goog.math.Size");goog.require("goog.object");goog.require("goog.userAgent");goog.style.setStyle=function(element,style,opt_value){if(goog.isString(style))goog.style.setStyle_(element,opt_value,style);else goog.object.forEach(style,goog.partial(goog.style.setStyle_,element))};
goog.style.setStyle_=function(element,value,style){element.style[goog.style.toCamelCase(style)]=value};goog.style.getStyle=function(element,style){return element.style[goog.style.toCamelCase(style)]};goog.style.getComputedStyle=function(element,style){var doc=goog.dom.getOwnerDocument(element);if(doc.defaultView&&doc.defaultView.getComputedStyle){var styles=doc.defaultView.getComputedStyle(element,"");if(styles)return styles[style]}return null};
goog.style.getCascadedStyle=function(element,style){return element.currentStyle?element.currentStyle[style]:null};goog.style.getStyle_=function(element,style){return goog.style.getComputedStyle(element,style)||goog.style.getCascadedStyle(element,style)||element.style[style]};goog.style.getComputedPosition=function(element){return goog.style.getStyle_(element,"position")};goog.style.getBackgroundColor=function(element){return goog.style.getStyle_(element,"backgroundColor")};
goog.style.getComputedOverflowX=function(element){return goog.style.getStyle_(element,"overflowX")};goog.style.getComputedOverflowY=function(element){return goog.style.getStyle_(element,"overflowY")};goog.style.getComputedZIndex=function(element){return goog.style.getStyle_(element,"zIndex")};goog.style.getComputedTextAlign=function(element){return goog.style.getStyle_(element,"textAlign")};goog.style.getComputedCursor=function(element){return goog.style.getStyle_(element,"cursor")};
goog.style.setPosition=function(el,arg1,opt_arg2){var x,y;var buggyGeckoSubPixelPos=goog.userAgent.GECKO&&(goog.userAgent.MAC||goog.userAgent.X11)&&goog.userAgent.isVersion("1.9");if(arg1 instanceof goog.math.Coordinate){x=arg1.x;y=arg1.y}else{x=arg1;y=opt_arg2}el.style.left=typeof x=="number"?(buggyGeckoSubPixelPos?Math.round(x):x)+"px":x;el.style.top=typeof y=="number"?(buggyGeckoSubPixelPos?Math.round(y):y)+"px":y};
goog.style.getPosition=function(element){return new goog.math.Coordinate(element.offsetLeft,element.offsetTop)};goog.style.getClientViewportElement=function(opt_node){var doc;if(opt_node)if(opt_node.nodeType==goog.dom.NodeType.DOCUMENT)doc=opt_node;else doc=goog.dom.getOwnerDocument(opt_node);else doc=goog.dom.getDocument();if(goog.userAgent.IE&&!goog.dom.getDomHelper(doc).isCss1CompatMode())return doc.body;return doc.documentElement};
goog.style.getBoundingClientRect_=function(el){var rect=el.getBoundingClientRect();if(goog.userAgent.IE){var doc=el.ownerDocument;rect.left-=doc.documentElement.clientLeft+doc.body.clientLeft;rect.top-=doc.documentElement.clientTop+doc.body.clientTop}return rect};
goog.style.getOffsetParent=function(element){if(goog.userAgent.IE)return element.offsetParent;var doc=goog.dom.getOwnerDocument(element);var positionStyle=goog.style.getStyle_(element,"position");var skipStatic=positionStyle=="fixed"||positionStyle=="absolute";for(var parent=element.parentNode;parent&&parent!=doc;parent=parent.parentNode){positionStyle=goog.style.getStyle_(parent,"position");skipStatic=skipStatic&&positionStyle=="static"&&parent!=doc.documentElement&&parent!=doc.body;if(!skipStatic&&
(parent.scrollWidth>parent.clientWidth||parent.scrollHeight>parent.clientHeight||positionStyle=="fixed"||positionStyle=="absolute"))return parent}return null};
goog.style.getVisibleRectForElement=function(element){var visibleRect=new goog.math.Box(0,Infinity,Infinity,0);var dom=goog.dom.getDomHelper(element);var body=dom.getDocument().body;var scrollEl=dom.getDocumentScrollElement();var inContainer;for(var el=element;el=goog.style.getOffsetParent(el);)if((!goog.userAgent.IE||el.clientWidth!=0)&&(!goog.userAgent.WEBKIT||el.clientHeight!=0||el!=body)&&(el.scrollWidth!=el.clientWidth||el.scrollHeight!=el.clientHeight)&&goog.style.getStyle_(el,"overflow")!=
"visible"){var pos=goog.style.getPageOffset(el);var client=goog.style.getClientLeftTop(el);pos.x+=client.x;pos.y+=client.y;visibleRect.top=Math.max(visibleRect.top,pos.y);visibleRect.right=Math.min(visibleRect.right,pos.x+el.clientWidth);visibleRect.bottom=Math.min(visibleRect.bottom,pos.y+el.clientHeight);visibleRect.left=Math.max(visibleRect.left,pos.x);inContainer=inContainer||el!=scrollEl}var scrollX=scrollEl.scrollLeft,scrollY=scrollEl.scrollTop;if(goog.userAgent.WEBKIT){visibleRect.left+=scrollX;
visibleRect.top+=scrollY}else{visibleRect.left=Math.max(visibleRect.left,scrollX);visibleRect.top=Math.max(visibleRect.top,scrollY)}if(!inContainer||goog.userAgent.WEBKIT){visibleRect.right+=scrollX;visibleRect.bottom+=scrollY}var winSize=dom.getViewportSize();visibleRect.right=Math.min(visibleRect.right,scrollX+winSize.width);visibleRect.bottom=Math.min(visibleRect.bottom,scrollY+winSize.height);return visibleRect.top>=0&&visibleRect.left>=0&&visibleRect.bottom>visibleRect.top&&visibleRect.right>
visibleRect.left?visibleRect:null};
goog.style.scrollIntoContainerView=function(element,container,opt_center){var elementPos=goog.style.getPageOffset(element);var containerPos=goog.style.getPageOffset(container);var containerBorder=goog.style.getBorderBox(container);var relX=elementPos.x-containerPos.x-containerBorder.left;var relY=elementPos.y-containerPos.y-containerBorder.top;var spaceX=container.clientWidth-element.offsetWidth;var spaceY=container.clientHeight-element.offsetHeight;if(opt_center){container.scrollLeft+=relX-spaceX/
2;container.scrollTop+=relY-spaceY/2}else{container.scrollLeft+=Math.min(relX,Math.max(relX-spaceX,0));container.scrollTop+=Math.min(relY,Math.max(relY-spaceY,0))}};
goog.style.getClientLeftTop=function(el){if(goog.userAgent.GECKO&&!goog.userAgent.isVersion("1.9")){var left=parseFloat(goog.style.getComputedStyle(el,"borderLeftWidth"));if(goog.style.isRightToLeft(el)){var scrollbarWidth=el.offsetWidth-el.clientWidth-left-parseFloat(goog.style.getComputedStyle(el,"borderRightWidth"));left+=scrollbarWidth}return new goog.math.Coordinate(left,parseFloat(goog.style.getComputedStyle(el,"borderTopWidth")))}return new goog.math.Coordinate(el.clientLeft,el.clientTop)};
goog.style.getPageOffset=function(el){var box,doc=goog.dom.getOwnerDocument(el);var positionStyle=goog.style.getStyle_(el,"position");var BUGGY_GECKO_BOX_OBJECT=goog.userAgent.GECKO&&doc.getBoxObjectFor&&!el.getBoundingClientRect&&positionStyle=="absolute"&&(box=doc.getBoxObjectFor(el))&&(box.screenX<0||box.screenY<0);var pos=new goog.math.Coordinate(0,0);var viewportElement=goog.style.getClientViewportElement(doc);if(el==viewportElement)return pos;if(el.getBoundingClientRect){box=goog.style.getBoundingClientRect_(el);
var scrollCoord=goog.dom.getDomHelper(doc).getDocumentScroll();pos.x=box.left+scrollCoord.x;pos.y=box.top+scrollCoord.y}else if(doc.getBoxObjectFor&&!BUGGY_GECKO_BOX_OBJECT){box=doc.getBoxObjectFor(el);var vpBox=doc.getBoxObjectFor(viewportElement);pos.x=box.screenX-vpBox.screenX;pos.y=box.screenY-vpBox.screenY}else{var parent=el;do{pos.x+=parent.offsetLeft;pos.y+=parent.offsetTop;if(parent!=el){pos.x+=parent.clientLeft||0;pos.y+=parent.clientTop||0}if(goog.userAgent.WEBKIT&&goog.style.getComputedPosition(parent)==
"fixed"){pos.x+=doc.body.scrollLeft;pos.y+=doc.body.scrollTop;break}parent=parent.offsetParent}while(parent&&parent!=el);if(goog.userAgent.OPERA||goog.userAgent.WEBKIT&&positionStyle=="absolute")pos.y-=doc.body.offsetTop;for(parent=el;(parent=goog.style.getOffsetParent(parent))&&parent!=doc.body&&parent!=viewportElement;){pos.x-=parent.scrollLeft;if(!goog.userAgent.OPERA||parent.tagName!="TR")pos.y-=parent.scrollTop}}return pos};goog.style.getPageOffsetLeft=function(el){return goog.style.getPageOffset(el).x};
goog.style.getPageOffsetTop=function(el){return goog.style.getPageOffset(el).y};
goog.style.getFramedPageOffset=function(el,relativeWin){var position=new goog.math.Coordinate(0,0);var currentWin=goog.dom.getWindow(goog.dom.getOwnerDocument(el));var currentEl=el;do{var offset=currentWin==relativeWin?goog.style.getPageOffset(currentEl):goog.style.getClientPosition(currentEl);position.x+=offset.x;position.y+=offset.y}while(currentWin&&currentWin!=relativeWin&&(currentEl=currentWin.frameElement)&&(currentWin=currentWin.parent));return position};
goog.style.translateRectForAnotherFrame=function(rect,origBase,newBase){if(origBase.getDocument()!=newBase.getDocument()){var body=origBase.getDocument().body;var pos=goog.style.getFramedPageOffset(body,newBase.getWindow());pos=goog.math.Coordinate.difference(pos,goog.style.getPageOffset(body));if(goog.userAgent.IE&&!origBase.isCss1CompatMode())pos=goog.math.Coordinate.difference(pos,origBase.getDocumentScroll());rect.left+=pos.x;rect.top+=pos.y}};
goog.style.getRelativePosition=function(a,b){var ap=goog.style.getClientPosition(a);var bp=goog.style.getClientPosition(b);return new goog.math.Coordinate(ap.x-bp.x,ap.y-bp.y)};
goog.style.getClientPosition=function(el){var pos=new goog.math.Coordinate;if(el.nodeType==goog.dom.NodeType.ELEMENT)if(el.getBoundingClientRect){var box=goog.style.getBoundingClientRect_(el);pos.x=box.left;pos.y=box.top}else{var scrollCoord=goog.dom.getDomHelper(el).getDocumentScroll();var pageCoord=goog.style.getPageOffset(el);pos.x=pageCoord.x-scrollCoord.x;pos.y=pageCoord.y-scrollCoord.y}else{pos.x=el.clientX;pos.y=el.clientY}return pos};
goog.style.setPageOffset=function(el,x,opt_y){var cur=goog.style.getPageOffset(el);if(x instanceof goog.math.Coordinate){opt_y=x.y;x=x.x}var dx=x-cur.x;var dy=opt_y-cur.y;goog.style.setPosition(el,el.offsetLeft+dx,el.offsetTop+dy)};
goog.style.setSize=function(element,w,opt_h){var h;if(w instanceof goog.math.Size){h=w.height;w=w.width}else{if(opt_h==undefined)throw Error("missing height argument");h=opt_h}element.style.width=typeof w=="number"?Math.round(w)+"px":w;element.style.height=typeof h=="number"?Math.round(h)+"px":h};
goog.style.getSize=function(element){var hasOperaBug=goog.userAgent.OPERA&&!goog.userAgent.isVersion("10");if(goog.style.getStyle_(element,"display")!="none")if(hasOperaBug)return new goog.math.Size(element.offsetWidth||element.clientWidth,element.offsetHeight||element.clientHeight);else return new goog.math.Size(element.offsetWidth,element.offsetHeight);var style=element.style;var originalDisplay=style.display;var originalVisibility=style.visibility;var originalPosition=style.position;style.visibility=
"hidden";style.position="absolute";style.display="inline";var originalWidth,originalHeight;if(hasOperaBug){originalWidth=element.offsetWidth||element.clientWidth;originalHeight=element.offsetHeight||element.clientHeight}else{originalWidth=element.offsetWidth;originalHeight=element.offsetHeight}style.display=originalDisplay;style.position=originalPosition;style.visibility=originalVisibility;return new goog.math.Size(originalWidth,originalHeight)};
goog.style.getBounds=function(element){var o=goog.style.getPageOffset(element);var s=goog.style.getSize(element);return new goog.math.Rect(o.x,o.y,s.width,s.height)};goog.style.toCamelCaseCache_={};goog.style.toCamelCase=function(selector){return goog.style.toCamelCaseCache_[selector]||(goog.style.toCamelCaseCache_[selector]=String(selector).replace(/\-([a-z])/g,function(all,match){return match.toUpperCase()}))};goog.style.toSelectorCaseCache_={};
goog.style.toSelectorCase=function(selector){return goog.style.toSelectorCaseCache_[selector]||(goog.style.toSelectorCaseCache_[selector]=selector.replace(/([A-Z])/g,"-$1").toLowerCase())};goog.style.getOpacity=function(el){var style=el.style;var result="";if("opacity"in style)result=style.opacity;else if("MozOpacity"in style)result=style.MozOpacity;else if("filter"in style){var match=style.filter.match(/alpha\(opacity=([\d.]+)\)/);if(match)result=String(match[1]/100)}return result==""?result:Number(result)};
goog.style.setOpacity=function(el,alpha){var style=el.style;if("opacity"in style)style.opacity=alpha;else if("MozOpacity"in style)style.MozOpacity=alpha;else if("filter"in style)if(alpha==="")style.filter="";else style.filter="alpha(opacity="+alpha*100+")"};
goog.style.setTransparentBackgroundImage=function(el,src){var style=el.style;if(goog.userAgent.IE&&!goog.userAgent.isVersion("8"))style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader("+'src="'+src+'", sizingMethod="crop")';else{style.backgroundImage="url("+src+")";style.backgroundPosition="top left";style.backgroundRepeat="no-repeat"}};goog.style.clearTransparentBackgroundImage=function(el){var style=el.style;if("filter"in style)style.filter="";else style.backgroundImage="none"};
goog.style.showElement=function(el,display){el.style.display=display?"":"none"};goog.style.isElementShown=function(el){return el.style.display!="none"};
goog.style.installStyles=function(stylesString,opt_node){var dh=goog.dom.getDomHelper(opt_node);var styleSheet=null;if(goog.userAgent.IE){styleSheet=dh.getDocument().createStyleSheet();goog.style.setStyles(styleSheet,stylesString)}else{var head=dh.getElementsByTagNameAndClass("head")[0];if(!head){var body=dh.getElementsByTagNameAndClass("body")[0];head=dh.createDom("head");body.parentNode.insertBefore(head,body)}styleSheet=dh.createDom("style");goog.style.setStyles(styleSheet,stylesString);dh.appendChild(head,
styleSheet)}return styleSheet};goog.style.uninstallStyles=function(styleSheet){var node=styleSheet.ownerNode||styleSheet.owningElement||styleSheet;goog.dom.removeNode(node)};goog.style.setStyles=function(element,stylesString){if(goog.userAgent.IE)element.cssText=stylesString;else{var propToSet=goog.userAgent.WEBKIT?"innerText":"innerHTML";element[propToSet]=stylesString}};
goog.style.setPreWrap=function(el){var style=el.style;if(goog.userAgent.IE&&!goog.userAgent.isVersion("8")){style.whiteSpace="pre";style.wordWrap="break-word"}else if(goog.userAgent.GECKO)style.whiteSpace="-moz-pre-wrap";else if(goog.userAgent.OPERA)style.whiteSpace="-o-pre-wrap";else style.whiteSpace="pre-wrap"};
goog.style.setInlineBlock=function(el){var style=el.style;style.position="relative";if(goog.userAgent.IE&&!goog.userAgent.isVersion("8")){style.zoom="1";style.display="inline"}else if(goog.userAgent.GECKO)style.display=goog.userAgent.isVersion("1.9a")?"inline-block":"-moz-inline-box";else style.display="inline-block"};goog.style.isRightToLeft=function(el){return"rtl"==goog.style.getStyle_(el,"direction")};
goog.style.unselectableStyle_=goog.userAgent.GECKO?"MozUserSelect":goog.userAgent.WEBKIT?"WebkitUserSelect":null;goog.style.isUnselectable=function(el){if(goog.style.unselectableStyle_)return el.style[goog.style.unselectableStyle_].toLowerCase()=="none";else if(goog.userAgent.IE||goog.userAgent.OPERA)return el.getAttribute("unselectable")=="on";return false};
goog.style.setUnselectable=function(el,unselectable,opt_noRecurse){var descendants=!opt_noRecurse?el.getElementsByTagName("*"):null;var name=goog.style.unselectableStyle_;if(name){var value=unselectable?"none":"";el.style[name]=value;if(descendants)for(var i=0,descendant;descendant=descendants[i];i++)descendant.style[name]=value}else if(goog.userAgent.IE||goog.userAgent.OPERA){var value=unselectable?"on":"";el.setAttribute("unselectable",value);if(descendants)for(var i=0,descendant;descendant=descendants[i];i++)descendant.setAttribute("unselectable",
value)}};goog.style.getBorderBoxSize=function(element){return new goog.math.Size(element.offsetWidth,element.offsetHeight)};
goog.style.setBorderBoxSize=function(element,size){var doc=goog.dom.getOwnerDocument(element);var isCss1CompatMode=goog.dom.getDomHelper(doc).isCss1CompatMode();if(goog.userAgent.IE&&(!isCss1CompatMode||!goog.userAgent.isVersion("8"))){var style=element.style;if(isCss1CompatMode){var paddingBox=goog.style.getPaddingBox(element);var borderBox=goog.style.getBorderBox(element);style.pixelWidth=size.width-borderBox.left-paddingBox.left-paddingBox.right-borderBox.right;style.pixelHeight=size.height-borderBox.top-
paddingBox.top-paddingBox.bottom-borderBox.bottom}else{style.pixelWidth=size.width;style.pixelHeight=size.height}}else goog.style.setBoxSizingSize_(element,size,"border-box")};
goog.style.getContentBoxSize=function(element){var doc=goog.dom.getOwnerDocument(element);var ieCurrentStyle=goog.userAgent.IE&&element.currentStyle;if(ieCurrentStyle&&goog.dom.getDomHelper(doc).isCss1CompatMode()&&ieCurrentStyle.width!="auto"&&ieCurrentStyle.height!="auto"&&!ieCurrentStyle.boxSizing){var width=goog.style.getIePixelValue_(element,ieCurrentStyle.width,"width","pixelWidth");var height=goog.style.getIePixelValue_(element,ieCurrentStyle.height,"height","pixelHeight");return new goog.math.Size(width,
height)}else{var borderBoxSize=goog.style.getBorderBoxSize(element);var paddingBox=goog.style.getPaddingBox(element);var borderBox=goog.style.getBorderBox(element);return new goog.math.Size(borderBoxSize.width-borderBox.left-paddingBox.left-paddingBox.right-borderBox.right,borderBoxSize.height-borderBox.top-paddingBox.top-paddingBox.bottom-borderBox.bottom)}};
goog.style.setContentBoxSize=function(element,size){var doc=goog.dom.getOwnerDocument(element);var isCss1CompatMode=goog.dom.getDomHelper(doc).isCss1CompatMode();if(goog.userAgent.IE&&(!isCss1CompatMode||!goog.userAgent.isVersion("8"))){var style=element.style;if(isCss1CompatMode){style.pixelWidth=size.width;style.pixelHeight=size.height}else{var paddingBox=goog.style.getPaddingBox(element);var borderBox=goog.style.getBorderBox(element);style.pixelWidth=size.width+borderBox.left+paddingBox.left+paddingBox.right+
borderBox.right;style.pixelHeight=size.height+borderBox.top+paddingBox.top+paddingBox.bottom+borderBox.bottom}}else goog.style.setBoxSizingSize_(element,size,"content-box")};
goog.style.setBoxSizingSize_=function(element,size,boxSizing){var style=element.style;if(goog.userAgent.GECKO)style.MozBoxSizing=boxSizing;else if(goog.userAgent.WEBKIT)style.WebkitBoxSizing=boxSizing;else if(goog.userAgent.OPERA&&!goog.userAgent.isVersion("9.50"))if(boxSizing)style.setProperty("box-sizing",boxSizing);else style.removeProperty("box-sizing");else style.boxSizing=boxSizing;style.width=size.width+"px";style.height=size.height+"px"};
goog.style.getIePixelValue_=function(element,value,name,pixelName){if(/^\d+px?$/.test(value))return parseInt(value,10);else{var oldStyleValue=element.style[name];var oldRuntimeValue=element.runtimeStyle[name];element.runtimeStyle[name]=element.currentStyle[name];element.style[name]=value;var pixelValue=element.style[pixelName];element.style[name]=oldStyleValue;element.runtimeStyle[name]=oldRuntimeValue;return pixelValue}};
goog.style.getIePixelDistance_=function(element,propName){return goog.style.getIePixelValue_(element,goog.style.getCascadedStyle(element,propName),"left","pixelLeft")};
goog.style.getBox_=function(element,stylePrefix){if(goog.userAgent.IE){var left=goog.style.getIePixelDistance_(element,stylePrefix+"Left");var right=goog.style.getIePixelDistance_(element,stylePrefix+"Right");var top=goog.style.getIePixelDistance_(element,stylePrefix+"Top");var bottom=goog.style.getIePixelDistance_(element,stylePrefix+"Bottom");return new goog.math.Box(top,right,bottom,left)}else{var left=goog.style.getComputedStyle(element,stylePrefix+"Left");var right=goog.style.getComputedStyle(element,
stylePrefix+"Right");var top=goog.style.getComputedStyle(element,stylePrefix+"Top");var bottom=goog.style.getComputedStyle(element,stylePrefix+"Bottom");return new goog.math.Box(parseFloat(top),parseFloat(right),parseFloat(bottom),parseFloat(left))}};goog.style.getPaddingBox=function(element){return goog.style.getBox_(element,"padding")};goog.style.getMarginBox=function(element){return goog.style.getBox_(element,"margin")};goog.style.ieBorderWidthKeywords_={thin:2,medium:4,thick:6};
goog.style.getIePixelBorder_=function(element,prop){if(goog.style.getCascadedStyle(element,prop+"Style")=="none")return 0;var width=goog.style.getCascadedStyle(element,prop+"Width");if(width in goog.style.ieBorderWidthKeywords_)return goog.style.ieBorderWidthKeywords_[width];return goog.style.getIePixelValue_(element,width,"left","pixelLeft")};
goog.style.getBorderBox=function(element){if(goog.userAgent.IE){var left=goog.style.getIePixelBorder_(element,"borderLeft");var right=goog.style.getIePixelBorder_(element,"borderRight");var top=goog.style.getIePixelBorder_(element,"borderTop");var bottom=goog.style.getIePixelBorder_(element,"borderBottom");return new goog.math.Box(top,right,bottom,left)}else{var left=goog.style.getComputedStyle(element,"borderLeftWidth");var right=goog.style.getComputedStyle(element,"borderRightWidth");var top=goog.style.getComputedStyle(element,
"borderTopWidth");var bottom=goog.style.getComputedStyle(element,"borderBottomWidth");return new goog.math.Box(parseFloat(top),parseFloat(right),parseFloat(bottom),parseFloat(left))}};
goog.style.getFontFamily=function(el){var doc=goog.dom.getOwnerDocument(el);var font="";if(doc.createTextRange){var range=doc.body.createTextRange();range.moveToElementText(el);font=range.queryCommandValue("FontName")}if(!font){font=goog.style.getStyle_(el,"fontFamily");if(goog.userAgent.OPERA&&goog.userAgent.LINUX)font=font.replace(/ \[[^\]]*\]/,"")}var fontsArray=font.split(",");if(fontsArray.length>1)font=fontsArray[0];return goog.string.stripQuotes(font,"\"'")};goog.style.lengthUnitRegex_=/[^\d]+$/;
goog.style.getLengthUnits=function(value){var units=value.match(goog.style.lengthUnitRegex_);return units&&units[0]||null};goog.style.ABSOLUTE_CSS_LENGTH_UNITS_={cm:1,"in":1,mm:1,pc:1,pt:1};goog.style.CONVERTIBLE_RELATIVE_CSS_UNITS_={em:1,ex:1};
goog.style.getFontSize=function(el){var fontSize=goog.style.getStyle_(el,"fontSize");var sizeUnits=goog.style.getLengthUnits(fontSize);if(fontSize&&"px"==sizeUnits)return parseInt(fontSize,10);if(goog.userAgent.IE)if(sizeUnits in goog.style.ABSOLUTE_CSS_LENGTH_UNITS_)return goog.style.getIePixelValue_(el,fontSize,"left","pixelLeft");else if(el.parentNode&&el.parentNode.nodeType==goog.dom.NodeType.ELEMENT&&sizeUnits in goog.style.CONVERTIBLE_RELATIVE_CSS_UNITS_){var parentElement=el.parentNode;var parentSize=
goog.style.getStyle_(parentElement,"fontSize");return goog.style.getIePixelValue_(parentElement,fontSize==parentSize?"1em":fontSize,"left","pixelLeft")}var sizeElement=goog.dom.createDom("span",{style:"visibility:hidden;position:absolute;"+"line-height:0;padding:0;margin:0;border:0;height:1em;"});goog.dom.appendChild(el,sizeElement);fontSize=sizeElement.offsetHeight;goog.dom.removeNode(sizeElement);return fontSize};
goog.style.parseStyleAttribute=function(value){var result={};goog.array.forEach(value.split(/\s*;\s*/),function(pair){var keyValue=pair.split(/\s*:\s*/);if(keyValue.length==2)result[goog.style.toCamelCase(keyValue[0].toLowerCase())]=keyValue[1]});return result};goog.style.toStyleAttribute=function(obj){var buffer=[];goog.object.forEach(obj,function(value,key){buffer.push(goog.style.toSelectorCase(key),":",value,";")});return buffer.join("")};
goog.style.setFloat=function(el,value){el.style[goog.userAgent.IE?"styleFloat":"cssFloat"]=value};goog.style.getFloat=function(el){return el.style[goog.userAgent.IE?"styleFloat":"cssFloat"]||""};
goog.style.getScrollbarWidth=function(){var mockElement=goog.dom.createElement("div");mockElement.style.cssText="visibility:hidden;overflow:scroll;"+"position:absolute;top:0;width:100px;height:100px";goog.dom.appendChild(goog.dom.getDocument().body,mockElement);var width=mockElement.offsetWidth-mockElement.clientWidth;goog.dom.removeNode(mockElement);return width};goog.provide("goog.events.EventHandler");goog.require("goog.Disposable");goog.require("goog.events");goog.require("goog.events.EventWrapper");goog.require("goog.object");goog.require("goog.structs.SimplePool");goog.events.EventHandler=function(opt_handler){this.handler_=opt_handler};goog.inherits(goog.events.EventHandler,goog.Disposable);goog.events.EventHandler.KEY_POOL_INITIAL_COUNT=0;goog.events.EventHandler.KEY_POOL_MAX_COUNT=100;
goog.events.EventHandler.keyPool_=new goog.structs.SimplePool(goog.events.EventHandler.KEY_POOL_INITIAL_COUNT,goog.events.EventHandler.KEY_POOL_MAX_COUNT);goog.events.EventHandler.keys_=null;goog.events.EventHandler.key_=null;
goog.events.EventHandler.prototype.listen=function(src,type,opt_fn,opt_capture,opt_handler){if(goog.isArray(type))for(var i=0;i<type.length;i++)this.listen(src,type[i],opt_fn,opt_capture,opt_handler);else{var key=goog.events.listen(src,type,opt_fn||this,opt_capture||false,opt_handler||this.handler_||this);this.recordListenerKey_(key)}return this};
goog.events.EventHandler.prototype.listenOnce=function(src,type,opt_fn,opt_capture,opt_handler){if(goog.isArray(type))for(var i=0;i<type.length;i++)this.listenOnce(src,type[i],opt_fn,opt_capture,opt_handler);else{var key=goog.events.listenOnce(src,type,opt_fn||this,opt_capture||false,opt_handler||this.handler_||this);this.recordListenerKey_(key)}return this};
goog.events.EventHandler.prototype.listenWithWrapper=function(src,wrapper,listener,opt_capt,opt_handler){wrapper.listen(src,listener,opt_capt,opt_handler||this.handler_,this);return this};goog.events.EventHandler.prototype.recordListenerKey_=function(key){if(this.keys_)this.keys_[key]=true;else if(this.key_){this.keys_=goog.events.EventHandler.keyPool_.getObject();this.keys_[this.key_]=true;this.key_=null;this.keys_[key]=true}else this.key_=key};
goog.events.EventHandler.prototype.unlisten=function(src,type,opt_fn,opt_capture,opt_handler){if(this.key_||this.keys_)if(goog.isArray(type))for(var i=0;i<type.length;i++)this.unlisten(src,type[i],opt_fn,opt_capture,opt_handler);else{var listener=goog.events.getListener(src,type,opt_fn||this,opt_capture||false,opt_handler||this.handler_||this);if(listener){var key=listener.key;goog.events.unlistenByKey(key);if(this.keys_)goog.object.remove(this.keys_,key);else if(this.key_==key)this.key_=null}}return this};
goog.events.EventHandler.prototype.unlistenWithWrapper=function(src,wrapper,listener,opt_capt,opt_handler){wrapper.unlisten(src,listener,opt_capt,opt_handler||this.handler_,this);return this};goog.events.EventHandler.prototype.removeAll=function(){if(this.keys_){for(var key in this.keys_){goog.events.unlistenByKey(key);delete this.keys_[key]}goog.events.EventHandler.keyPool_.releaseObject(this.keys_);this.keys_=null}else if(this.key_)goog.events.unlistenByKey(this.key_)};
goog.events.EventHandler.prototype.disposeInternal=function(){goog.events.EventHandler.superClass_.disposeInternal.call(this);this.removeAll()};goog.events.EventHandler.prototype.handleEvent=function(e){throw Error("EventHandler.handleEvent not implemented");};goog.provide("goog.ui.IdGenerator");goog.ui.IdGenerator=function(){};goog.addSingletonGetter(goog.ui.IdGenerator);goog.ui.IdGenerator.prototype.nextId_=0;goog.ui.IdGenerator.prototype.getNextUniqueId=function(){return":"+(this.nextId_++).toString(36)};goog.ui.IdGenerator.instance=goog.ui.IdGenerator.getInstance();goog.provide("goog.ui.Component");goog.provide("goog.ui.Component.Error");goog.provide("goog.ui.Component.EventType");goog.provide("goog.ui.Component.State");goog.require("goog.array");goog.require("goog.dom");goog.require("goog.dom.DomHelper");goog.require("goog.events");goog.require("goog.events.Event");goog.require("goog.events.EventHandler");goog.require("goog.events.EventTarget");goog.require("goog.object");goog.require("goog.style");goog.require("goog.ui.IdGenerator");
goog.ui.Component=function(opt_domHelper){goog.events.EventTarget.call(this);this.dom_=opt_domHelper||goog.dom.getDomHelper();this.rightToLeft_=goog.ui.Component.defaultRightToLeft_};goog.inherits(goog.ui.Component,goog.events.EventTarget);goog.ui.Component.prototype.idGenerator_=goog.ui.IdGenerator.getInstance();goog.ui.Component.defaultRightToLeft_=null;
goog.ui.Component.EventType={BEFORE_SHOW:"beforeshow",SHOW:"show",HIDE:"hide",DISABLE:"disable",ENABLE:"enable",HIGHLIGHT:"highlight",UNHIGHLIGHT:"unhighlight",ACTIVATE:"activate",DEACTIVATE:"deactivate",SELECT:"select",UNSELECT:"unselect",CHECK:"check",UNCHECK:"uncheck",FOCUS:"focus",BLUR:"blur",OPEN:"open",CLOSE:"close",ENTER:"enter",LEAVE:"leave",ACTION:"action",CHANGE:"change"};
goog.ui.Component.Error={NOT_SUPPORTED:"Method not supported",DECORATE_INVALID:"Invalid element to decorate",ALREADY_RENDERED:"Component already rendered",PARENT_UNABLE_TO_BE_SET:"Unable to set parent component",CHILD_INDEX_OUT_OF_BOUNDS:"Child component index out of bounds",NOT_OUR_CHILD:"Child is not in parent component",NOT_IN_DOCUMENT:"Operation not supported while component is not in document",STATE_INVALID:"Invalid component state"};
goog.ui.Component.State={ALL:255,DISABLED:1,HOVER:2,ACTIVE:4,SELECTED:8,CHECKED:16,FOCUSED:32,OPENED:64};
goog.ui.Component.getStateTransitionEvent=function(state,isEntering){switch(state){case goog.ui.Component.State.DISABLED:return isEntering?goog.ui.Component.EventType.DISABLE:goog.ui.Component.EventType.ENABLE;case goog.ui.Component.State.HOVER:return isEntering?goog.ui.Component.EventType.HIGHLIGHT:goog.ui.Component.EventType.UNHIGHLIGHT;case goog.ui.Component.State.ACTIVE:return isEntering?goog.ui.Component.EventType.ACTIVATE:goog.ui.Component.EventType.DEACTIVATE;case goog.ui.Component.State.SELECTED:return isEntering?
goog.ui.Component.EventType.SELECT:goog.ui.Component.EventType.UNSELECT;case goog.ui.Component.State.CHECKED:return isEntering?goog.ui.Component.EventType.CHECK:goog.ui.Component.EventType.UNCHECK;case goog.ui.Component.State.FOCUSED:return isEntering?goog.ui.Component.EventType.FOCUS:goog.ui.Component.EventType.BLUR;case goog.ui.Component.State.OPENED:return isEntering?goog.ui.Component.EventType.OPEN:goog.ui.Component.EventType.CLOSE;default:}throw Error(goog.ui.Component.Error.STATE_INVALID);};
goog.ui.Component.setDefaultRightToLeft=function(rightToLeft){goog.ui.Component.defaultRightToLeft_=rightToLeft};goog.ui.Component.prototype.id_=null;goog.ui.Component.prototype.dom_=null;goog.ui.Component.prototype.inDocument_=false;goog.ui.Component.prototype.element_=null;goog.ui.Component.prototype.googUiComponentHandler_;goog.ui.Component.prototype.rightToLeft_=null;goog.ui.Component.prototype.model_=null;goog.ui.Component.prototype.parent_=null;goog.ui.Component.prototype.children_=null;
goog.ui.Component.prototype.childIndex_=null;goog.ui.Component.prototype.wasDecorated_=false;goog.ui.Component.prototype.getId=function(){return this.id_||(this.id_=this.idGenerator_.getNextUniqueId())};goog.ui.Component.prototype.setId=function(id){if(this.parent_&&this.parent_.childIndex_){goog.object.remove(this.parent_.childIndex_,this.id_);goog.object.add(this.parent_.childIndex_,id,this)}this.id_=id};goog.ui.Component.prototype.getElement=function(){return this.element_};
goog.ui.Component.prototype.setElementInternal=function(element){this.element_=element};goog.ui.Component.prototype.getHandler=function(){return this.googUiComponentHandler_||(this.googUiComponentHandler_=new goog.events.EventHandler(this))};
goog.ui.Component.prototype.setParent=function(parent){if(this==parent)throw Error(goog.ui.Component.Error.PARENT_UNABLE_TO_BE_SET);if(parent&&this.parent_&&this.id_&&this.parent_.getChild(this.id_)&&this.parent_!=parent)throw Error(goog.ui.Component.Error.PARENT_UNABLE_TO_BE_SET);this.parent_=parent;goog.ui.Component.superClass_.setParentEventTarget.call(this,parent)};goog.ui.Component.prototype.getParent=function(){return this.parent_};
goog.ui.Component.prototype.setParentEventTarget=function(parent){if(this.parent_&&this.parent_!=parent)throw Error(goog.ui.Component.Error.NOT_SUPPORTED);goog.ui.Component.superClass_.setParentEventTarget.call(this,parent)};goog.ui.Component.prototype.getDomHelper=function(){return this.dom_};goog.ui.Component.prototype.isInDocument=function(){return this.inDocument_};goog.ui.Component.prototype.createDom=function(){this.element_=this.dom_.createElement("div")};
goog.ui.Component.prototype.render=function(opt_parentElement){this.render_(opt_parentElement)};goog.ui.Component.prototype.renderBefore=function(siblingElement){this.render_(siblingElement.parentNode,siblingElement)};
goog.ui.Component.prototype.render_=function(opt_parentElement,opt_beforeElement){if(this.inDocument_)throw Error(goog.ui.Component.Error.ALREADY_RENDERED);if(!this.element_)this.createDom();if(opt_parentElement)opt_parentElement.insertBefore(this.element_,opt_beforeElement||null);else this.dom_.getDocument().body.appendChild(this.element_);if(!this.parent_||this.parent_.isInDocument())this.enterDocument()};
goog.ui.Component.prototype.decorate=function(element){if(this.inDocument_)throw Error(goog.ui.Component.Error.ALREADY_RENDERED);else if(element&&this.canDecorate(element)){this.wasDecorated_=true;if(!this.dom_||this.dom_.getDocument()!=goog.dom.getOwnerDocument(element))this.dom_=goog.dom.getDomHelper(element);this.decorateInternal(element);this.enterDocument()}else throw Error(goog.ui.Component.Error.DECORATE_INVALID);};goog.ui.Component.prototype.canDecorate=function(element){return true};
goog.ui.Component.prototype.wasDecorated=function(){return this.wasDecorated_};goog.ui.Component.prototype.decorateInternal=function(element){this.element_=element};goog.ui.Component.prototype.enterDocument=function(){this.inDocument_=true;this.forEachChild(function(child){if(!child.isInDocument()&&child.getElement())child.enterDocument()})};
goog.ui.Component.prototype.exitDocument=function(){this.forEachChild(function(child){if(child.isInDocument())child.exitDocument()});if(this.googUiComponentHandler_)this.googUiComponentHandler_.removeAll();this.inDocument_=false};
goog.ui.Component.prototype.disposeInternal=function(){goog.ui.Component.superClass_.disposeInternal.call(this);if(this.inDocument_)this.exitDocument();if(this.googUiComponentHandler_){this.googUiComponentHandler_.dispose();delete this.googUiComponentHandler_}this.forEachChild(function(child){child.dispose()});if(!this.wasDecorated_&&this.element_)goog.dom.removeNode(this.element_);this.children_=null;this.childIndex_=null;this.element_=null;this.model_=null;this.parent_=null};
goog.ui.Component.prototype.makeId=function(idFragment){return this.getId()+"."+idFragment};goog.ui.Component.prototype.getModel=function(){return this.model_};goog.ui.Component.prototype.setModel=function(obj){this.model_=obj};goog.ui.Component.prototype.getFragmentFromId=function(id){return id.substring(this.getId().length+1)};goog.ui.Component.prototype.getElementByFragment=function(idFragment){if(!this.inDocument_)throw Error(goog.ui.Component.Error.NOT_IN_DOCUMENT);return this.dom_.getElement(this.makeId(idFragment))};
goog.ui.Component.prototype.addChild=function(child,opt_render){this.addChildAt(child,this.getChildCount(),opt_render)};
goog.ui.Component.prototype.addChildAt=function(child,index,opt_render){if(child.inDocument_&&(opt_render||!this.inDocument_))throw Error(goog.ui.Component.Error.ALREADY_RENDERED);if(index<0||index>this.getChildCount())throw Error(goog.ui.Component.Error.CHILD_INDEX_OUT_OF_BOUNDS);if(!this.childIndex_||!this.children_){this.childIndex_={};this.children_=[]}if(child.getParent()==this){goog.object.set(this.childIndex_,child.getId(),child);goog.array.remove(this.children_,child)}else goog.object.add(this.childIndex_,
child.getId(),child);child.setParent(this);goog.array.insertAt(this.children_,child,index);if(child.inDocument_&&this.inDocument_&&child.getParent()==this){var contentElement=this.getContentElement();contentElement.insertBefore(child.getElement(),contentElement.childNodes[index]||null)}else if(opt_render){if(!this.element_)this.createDom();var sibling=this.getChildAt(index+1);child.render_(this.getContentElement(),sibling?sibling.element_:null)}else if(this.inDocument_&&!child.inDocument_&&child.element_)child.enterDocument()};
goog.ui.Component.prototype.getContentElement=function(){return this.element_};goog.ui.Component.prototype.isRightToLeft=function(){if(this.rightToLeft_==null)this.rightToLeft_=goog.style.isRightToLeft(this.inDocument_?this.element_:this.dom_.getDocument().body);return this.rightToLeft_};goog.ui.Component.prototype.setRightToLeft=function(rightToLeft){if(this.inDocument_)throw Error(goog.ui.Component.Error.ALREADY_RENDERED);this.rightToLeft_=rightToLeft};
goog.ui.Component.prototype.hasChildren=function(){return!!this.children_&&this.children_.length!=0};goog.ui.Component.prototype.getChildCount=function(){return this.children_?this.children_.length:0};goog.ui.Component.prototype.getChildIds=function(){var ids=[];this.forEachChild(function(child){ids.push(child.getId())});return ids};goog.ui.Component.prototype.getChild=function(id){return this.childIndex_&&id?goog.object.get(this.childIndex_,id)||null:null};
goog.ui.Component.prototype.getChildAt=function(index){return this.children_?this.children_[index]||null:null};goog.ui.Component.prototype.forEachChild=function(f,opt_obj){if(this.children_)goog.array.forEach(this.children_,f,opt_obj)};goog.ui.Component.prototype.indexOfChild=function(child){return this.children_&&child?goog.array.indexOf(this.children_,child):-1};
goog.ui.Component.prototype.removeChild=function(child,opt_unrender){if(child){var id=goog.isString(child)?child:child.getId();child=this.getChild(id);if(id&&child){goog.object.remove(this.childIndex_,id);goog.array.remove(this.children_,child);if(opt_unrender){child.exitDocument();if(child.element_)goog.dom.removeNode(child.element_)}child.setParent(null)}}if(!child)throw Error(goog.ui.Component.Error.NOT_OUR_CHILD);return child};
goog.ui.Component.prototype.removeChildAt=function(index,opt_unrender){return this.removeChild(this.getChildAt(index),opt_unrender)};goog.ui.Component.prototype.removeChildren=function(opt_unrender){while(this.hasChildren())this.removeChildAt(0,opt_unrender)};goog.provide("goog.graphics.AbstractGraphics");goog.require("goog.graphics.Path");goog.require("goog.math.Coordinate");goog.require("goog.math.Size");goog.require("goog.style");goog.require("goog.ui.Component");goog.graphics.AbstractGraphics=function(width,height,opt_coordWidth,opt_coordHeight,opt_domHelper){goog.ui.Component.call(this,opt_domHelper);this.width=width;this.height=height;this.coordWidth=opt_coordWidth||null;this.coordHeight=opt_coordHeight||null};
goog.inherits(goog.graphics.AbstractGraphics,goog.ui.Component);goog.graphics.AbstractGraphics.prototype.canvasElement=null;goog.graphics.AbstractGraphics.prototype.coordLeft=0;goog.graphics.AbstractGraphics.prototype.coordTop=0;goog.graphics.AbstractGraphics.prototype.getCanvasElement=function(){return this.canvasElement};goog.graphics.AbstractGraphics.prototype.setCoordSize=function(coordWidth,coordHeight){this.coordWidth=coordWidth;this.coordHeight=coordHeight};
goog.graphics.AbstractGraphics.prototype.getCoordSize=function(){if(this.coordWidth)return new goog.math.Size(this.coordWidth,this.coordHeight);else return this.getPixelSize()};goog.graphics.AbstractGraphics.prototype.setCoordOrigin=goog.abstractMethod;goog.graphics.AbstractGraphics.prototype.getCoordOrigin=function(){return new goog.math.Coordinate(this.coordLeft,this.coordTop)};goog.graphics.AbstractGraphics.prototype.setSize=goog.abstractMethod;
goog.graphics.AbstractGraphics.prototype.getSize=function(){return this.getPixelSize()};goog.graphics.AbstractGraphics.prototype.getPixelSize=function(){if(this.isInDocument())return goog.style.getSize(this.getElement());if(goog.isNumber(this.width)&&goog.isNumber(this.height))return new goog.math.Size(this.width,this.height);return null};
goog.graphics.AbstractGraphics.prototype.getPixelScaleX=function(){var pixelSize=this.getPixelSize();return pixelSize?pixelSize.width/this.getCoordSize().width:0};goog.graphics.AbstractGraphics.prototype.getPixelScaleY=function(){var pixelSize=this.getPixelSize();return pixelSize?pixelSize.height/this.getCoordSize().height:0};goog.graphics.AbstractGraphics.prototype.clear=goog.abstractMethod;goog.graphics.AbstractGraphics.prototype.removeElement=function(element){goog.dom.removeNode(element.getElement())};
goog.graphics.AbstractGraphics.prototype.setElementFill=goog.abstractMethod;goog.graphics.AbstractGraphics.prototype.setElementStroke=goog.abstractMethod;goog.graphics.AbstractGraphics.prototype.setElementTransform=goog.abstractMethod;goog.graphics.AbstractGraphics.prototype.drawCircle=function(cx,cy,r,stroke,fill,opt_group){return this.drawEllipse(cx,cy,r,r,stroke,fill,opt_group)};goog.graphics.AbstractGraphics.prototype.drawEllipse=goog.abstractMethod;
goog.graphics.AbstractGraphics.prototype.drawRect=goog.abstractMethod;goog.graphics.AbstractGraphics.prototype.drawText=function(text,x,y,width,height,align,vAlign,font,stroke,fill,opt_group){var baseline=font.size/2;var textY;if(vAlign=="bottom")textY=y+height-baseline;else if(vAlign=="center")textY=y+height/2;else textY=y+baseline;return this.drawTextOnLine(text,x,textY,x+width,textY,align,font,stroke,fill,opt_group)};goog.graphics.AbstractGraphics.prototype.drawTextOnLine=goog.abstractMethod;
goog.graphics.AbstractGraphics.prototype.drawPath=goog.abstractMethod;goog.graphics.AbstractGraphics.prototype.createGroup=goog.abstractMethod;goog.graphics.AbstractGraphics.prototype.createPath=function(){return new goog.graphics.Path};goog.graphics.AbstractGraphics.prototype.getTextWidth=goog.abstractMethod;goog.graphics.AbstractGraphics.prototype.isDomClonable=function(){return false};goog.graphics.AbstractGraphics.prototype.suspend=function(){};
goog.graphics.AbstractGraphics.prototype.resume=function(){};goog.provide("goog.graphics.AffineTransform");goog.require("goog.math");goog.graphics.AffineTransform=function(opt_m00,opt_m10,opt_m01,opt_m11,opt_m02,opt_m12){if(arguments.length==6)this.setTransform(opt_m00,opt_m10,opt_m01,opt_m11,opt_m02,opt_m12);else if(arguments.length!=0)throw Error("Insufficient matrix parameters");else{this.m00_=this.m11_=1;this.m10_=this.m01_=this.m02_=this.m12_=0}};
goog.graphics.AffineTransform.prototype.isIdentity=function(){return this.m00_==1&&this.m10_==0&&this.m01_==0&&this.m11_==1&&this.m02_==0&&this.m12_==0};goog.graphics.AffineTransform.prototype.clone=function(){return new goog.graphics.AffineTransform(this.m00_,this.m10_,this.m01_,this.m11_,this.m02_,this.m12_)};
goog.graphics.AffineTransform.prototype.setTransform=function(m00,m10,m01,m11,m02,m12){if(!goog.isNumber(m00)||!goog.isNumber(m10)||!goog.isNumber(m01)||!goog.isNumber(m11)||!goog.isNumber(m02)||!goog.isNumber(m12))throw Error("Invalid transform parameters");this.m00_=m00;this.m10_=m10;this.m01_=m01;this.m11_=m11;this.m02_=m02;this.m12_=m12;return this};
goog.graphics.AffineTransform.prototype.copyFrom=function(tx){this.m00_=tx.m00_;this.m10_=tx.m10_;this.m01_=tx.m01_;this.m11_=tx.m11_;this.m02_=tx.m02_;this.m12_=tx.m12_;return this};goog.graphics.AffineTransform.prototype.scale=function(sx,sy){this.m00_*=sx;this.m10_*=sx;this.m01_*=sy;this.m11_*=sy;return this};goog.graphics.AffineTransform.prototype.translate=function(dx,dy){this.m02_+=dx*this.m00_+dy*this.m01_;this.m12_+=dx*this.m10_+dy*this.m11_;return this};
goog.graphics.AffineTransform.prototype.rotate=function(theta,x,y){return this.concatenate(goog.graphics.AffineTransform.getRotateInstance(theta,x,y))};goog.graphics.AffineTransform.prototype.shear=function(shx,shy){var m00=this.m00_;var m10=this.m10_;this.m00_+=shy*this.m01_;this.m10_+=shy*this.m11_;this.m01_+=shx*m00;this.m11_+=shx*m10;return this};
goog.graphics.AffineTransform.prototype.toString=function(){return"matrix("+[this.m00_,this.m10_,this.m01_,this.m11_,this.m02_,this.m12_].join(",")+")"};goog.graphics.AffineTransform.prototype.getScaleX=function(){return this.m00_};goog.graphics.AffineTransform.prototype.getScaleY=function(){return this.m11_};goog.graphics.AffineTransform.prototype.getTranslateX=function(){return this.m02_};goog.graphics.AffineTransform.prototype.getTranslateY=function(){return this.m12_};
goog.graphics.AffineTransform.prototype.getShearX=function(){return this.m01_};goog.graphics.AffineTransform.prototype.getShearY=function(){return this.m10_};goog.graphics.AffineTransform.prototype.concatenate=function(tx){var m0=this.m00_;var m1=this.m01_;this.m00_=tx.m00_*m0+tx.m10_*m1;this.m01_=tx.m01_*m0+tx.m11_*m1;this.m02_+=tx.m02_*m0+tx.m12_*m1;m0=this.m10_;m1=this.m11_;this.m10_=tx.m00_*m0+tx.m10_*m1;this.m11_=tx.m01_*m0+tx.m11_*m1;this.m12_+=tx.m02_*m0+tx.m12_*m1;return this};
goog.graphics.AffineTransform.prototype.preConcatenate=function(tx){var m0=this.m00_;var m1=this.m10_;this.m00_=tx.m00_*m0+tx.m01_*m1;this.m10_=tx.m10_*m0+tx.m11_*m1;m0=this.m01_;m1=this.m11_;this.m01_=tx.m00_*m0+tx.m01_*m1;this.m11_=tx.m10_*m0+tx.m11_*m1;m0=this.m02_;m1=this.m12_;this.m02_=tx.m00_*m0+tx.m01_*m1+tx.m02_;this.m12_=tx.m10_*m0+tx.m11_*m1+tx.m12_;return this};
goog.graphics.AffineTransform.prototype.transform=function(src,srcOff,dst,dstOff,numPts){var i=srcOff;var j=dstOff;var srcEnd=srcOff+2*numPts;while(i<srcEnd){var x=src[i++];var y=src[i++];dst[j++]=x*this.m00_+y*this.m01_+this.m02_;dst[j++]=x*this.m10_+y*this.m11_+this.m12_}};goog.graphics.AffineTransform.prototype.getDeterminant=function(){return this.m00_*this.m11_-this.m01_*this.m10_};
goog.graphics.AffineTransform.prototype.isInvertible=function(){var det=this.getDeterminant();return goog.math.isFiniteNumber(det)&&goog.math.isFiniteNumber(this.m02_)&&goog.math.isFiniteNumber(this.m12_)&&det!=0};goog.graphics.AffineTransform.prototype.createInverse=function(){var det=this.getDeterminant();return new goog.graphics.AffineTransform(this.m11_/det,-this.m10_/det,-this.m01_/det,this.m00_/det,(this.m01_*this.m12_-this.m11_*this.m02_)/det,(this.m10_*this.m02_-this.m00_*this.m12_)/det)};
goog.graphics.AffineTransform.getScaleInstance=function(sx,sy){return(new goog.graphics.AffineTransform).setToScale(sx,sy)};goog.graphics.AffineTransform.getTranslateInstance=function(dx,dy){return(new goog.graphics.AffineTransform).setToTranslation(dx,dy)};goog.graphics.AffineTransform.getShearInstance=function(shx,shy){return(new goog.graphics.AffineTransform).setToShear(shx,shy)};
goog.graphics.AffineTransform.getRotateInstance=function(theta,x,y){return(new goog.graphics.AffineTransform).setToRotation(theta,x,y)};goog.graphics.AffineTransform.prototype.setToScale=function(sx,sy){return this.setTransform(sx,0,0,sy,0,0)};goog.graphics.AffineTransform.prototype.setToTranslation=function(dx,dy){return this.setTransform(1,0,0,1,dx,dy)};goog.graphics.AffineTransform.prototype.setToShear=function(shx,shy){return this.setTransform(1,shy,shx,1,0,0)};
goog.graphics.AffineTransform.prototype.setToRotation=function(theta,x,y){var cos=Math.cos(theta);var sin=Math.sin(theta);return this.setTransform(cos,sin,-sin,cos,x-x*cos+y*sin,y-x*sin-y*cos)};goog.graphics.AffineTransform.prototype.equals=function(tx){if(this==tx)return true;if(!tx)return false;return this.m00_==tx.m00_&&this.m01_==tx.m01_&&this.m02_==tx.m02_&&this.m10_==tx.m10_&&this.m11_==tx.m11_&&this.m12_==tx.m12_};goog.provide("goog.graphics.Element");goog.require("goog.events");goog.require("goog.events.EventTarget");goog.require("goog.graphics.AffineTransform");goog.require("goog.math");goog.graphics.Element=function(element,graphics){goog.events.EventTarget.call(this);this.element_=element;this.graphics_=graphics;this.customEvent_=false};goog.inherits(goog.graphics.Element,goog.events.EventTarget);goog.graphics.Element.prototype.graphics_=null;goog.graphics.Element.prototype.element_=null;
goog.graphics.Element.prototype.transform_=null;goog.graphics.Element.prototype.getElement=function(){return this.element_};goog.graphics.Element.prototype.getGraphics=function(){return this.graphics_};goog.graphics.Element.prototype.setTransformation=function(x,y,rotate,centerX,centerY){this.transform_=goog.graphics.AffineTransform.getRotateInstance(goog.math.toRadians(rotate),centerX,centerY).translate(x,y);this.getGraphics().setElementTransform(this,x,y,rotate,centerX,centerY)};
goog.graphics.Element.prototype.getTransform=function(){return this.transform_?this.transform_.clone():new goog.graphics.AffineTransform};goog.graphics.Element.prototype.addEventListener=function(type,handler,opt_capture,opt_handlerScope){goog.events.listen(this.element_,type,handler,opt_capture,opt_handlerScope)};goog.graphics.Element.prototype.removeEventListener=function(type,handler,opt_capture,opt_handlerScope){goog.events.unlisten(this.element_,type,handler,opt_capture,opt_handlerScope)};
goog.graphics.Element.prototype.disposeInternal=function(){goog.graphics.Element.superClass_.disposeInternal.call(this);goog.events.removeAll(this.element_)};goog.provide("goog.graphics.StrokeAndFillElement");goog.require("goog.graphics.Element");goog.graphics.StrokeAndFillElement=function(element,graphics,stroke,fill){goog.graphics.Element.call(this,element,graphics);this.setStroke(stroke);this.setFill(fill)};goog.inherits(goog.graphics.StrokeAndFillElement,goog.graphics.Element);goog.graphics.StrokeAndFillElement.prototype.fill_=null;goog.graphics.StrokeAndFillElement.prototype.stroke_=null;
goog.graphics.StrokeAndFillElement.prototype.setFill=function(fill){this.fill_=fill;this.getGraphics().setElementFill(this,fill)};goog.graphics.StrokeAndFillElement.prototype.getFill=function(){return this.fill_};goog.graphics.StrokeAndFillElement.prototype.setStroke=function(stroke){this.stroke_=stroke;this.getGraphics().setElementStroke(this,stroke)};goog.graphics.StrokeAndFillElement.prototype.getStroke=function(){return this.stroke_};
goog.graphics.StrokeAndFillElement.prototype.reapplyStroke=function(){if(this.stroke_)this.setStroke(this.stroke_)};goog.provide("goog.graphics.EllipseElement");goog.require("goog.graphics.StrokeAndFillElement");goog.graphics.EllipseElement=function(element,graphics,stroke,fill){goog.graphics.StrokeAndFillElement.call(this,element,graphics,stroke,fill)};goog.inherits(goog.graphics.EllipseElement,goog.graphics.StrokeAndFillElement);goog.graphics.EllipseElement.prototype.setCenter=goog.abstractMethod;goog.graphics.EllipseElement.prototype.setRadius=goog.abstractMethod;goog.provide("goog.graphics.GroupElement");goog.require("goog.graphics.Element");goog.graphics.GroupElement=function(element,graphics){goog.graphics.Element.call(this,element,graphics)};goog.inherits(goog.graphics.GroupElement,goog.graphics.Element);goog.graphics.GroupElement.prototype.clear=goog.abstractMethod;goog.graphics.GroupElement.prototype.setSize=goog.abstractMethod;goog.provide("goog.graphics.ImageElement");goog.require("goog.graphics.Element");goog.graphics.ImageElement=function(element,graphics){goog.graphics.Element.call(this,element,graphics)};goog.inherits(goog.graphics.ImageElement,goog.graphics.Element);goog.graphics.ImageElement.prototype.setPosition=goog.abstractMethod;goog.graphics.ImageElement.prototype.setSize=goog.abstractMethod;goog.graphics.ImageElement.prototype.setSource=goog.abstractMethod;goog.provide("goog.graphics.PathElement");goog.require("goog.graphics.StrokeAndFillElement");goog.graphics.PathElement=function(element,graphics,stroke,fill){goog.graphics.StrokeAndFillElement.call(this,element,graphics,stroke,fill)};goog.inherits(goog.graphics.PathElement,goog.graphics.StrokeAndFillElement);goog.graphics.PathElement.prototype.setPath=goog.abstractMethod;goog.provide("goog.graphics.RectElement");goog.require("goog.graphics.StrokeAndFillElement");goog.graphics.RectElement=function(element,graphics,stroke,fill){goog.graphics.StrokeAndFillElement.call(this,element,graphics,stroke,fill)};goog.inherits(goog.graphics.RectElement,goog.graphics.StrokeAndFillElement);goog.graphics.RectElement.prototype.setPosition=goog.abstractMethod;goog.graphics.RectElement.prototype.setSize=goog.abstractMethod;goog.provide("goog.graphics.TextElement");goog.require("goog.graphics.StrokeAndFillElement");goog.graphics.TextElement=function(element,graphics,stroke,fill){goog.graphics.StrokeAndFillElement.call(this,element,graphics,stroke,fill)};goog.inherits(goog.graphics.TextElement,goog.graphics.StrokeAndFillElement);goog.graphics.TextElement.prototype.setText=goog.abstractMethod;goog.provide("goog.graphics.CanvasEllipseElement");goog.provide("goog.graphics.CanvasGroupElement");goog.provide("goog.graphics.CanvasImageElement");goog.provide("goog.graphics.CanvasPathElement");goog.provide("goog.graphics.CanvasRectElement");goog.provide("goog.graphics.CanvasTextElement");goog.require("goog.array");goog.require("goog.dom");goog.require("goog.graphics.EllipseElement");goog.require("goog.graphics.GroupElement");goog.require("goog.graphics.ImageElement");goog.require("goog.graphics.Path");
goog.require("goog.graphics.PathElement");goog.require("goog.graphics.RectElement");goog.require("goog.graphics.TextElement");goog.graphics.CanvasGroupElement=function(graphics){goog.graphics.GroupElement.call(this,null,graphics);this.children_=[]};goog.inherits(goog.graphics.CanvasGroupElement,goog.graphics.GroupElement);goog.graphics.CanvasGroupElement.prototype.clear=function(){if(this.children_.length){this.children_.length=0;this.getGraphics().redraw()}};
goog.graphics.CanvasGroupElement.prototype.setSize=function(width,height){};goog.graphics.CanvasGroupElement.prototype.appendChild=function(element){this.children_.push(element)};goog.graphics.CanvasGroupElement.prototype.draw=function(ctx){for(var i=0,len=this.children_.length;i<len;i++)this.getGraphics().drawElement(this.children_[i])};
goog.graphics.CanvasEllipseElement=function(element,graphics,cx,cy,rx,ry,stroke,fill){goog.graphics.EllipseElement.call(this,element,graphics,stroke,fill);this.cx_=cx;this.cy_=cy;this.rx_=rx;this.ry_=ry;this.path_=new goog.graphics.Path;this.setUpPath_();this.pathElement_=new goog.graphics.CanvasPathElement(null,graphics,this.path_,stroke,fill)};goog.inherits(goog.graphics.CanvasEllipseElement,goog.graphics.EllipseElement);
goog.graphics.CanvasEllipseElement.prototype.setUpPath_=function(){this.path_.clear();this.path_.arc(this.cx_,this.cy_,this.rx_,this.ry_,0,360,false);this.path_.close()};goog.graphics.CanvasEllipseElement.prototype.setCenter=function(cx,cy){this.cx_=cx;this.cy_=cy;this.setUpPath_();this.pathElement_.setPath(this.path_)};goog.graphics.CanvasEllipseElement.prototype.setRadius=function(rx,ry){this.rx_=rx;this.ry_=ry;this.setUpPath_();this.pathElement_.setPath(this.path_)};
goog.graphics.CanvasEllipseElement.prototype.draw=function(ctx){this.pathElement_.draw(ctx)};goog.graphics.CanvasRectElement=function(element,graphics,x,y,w,h,stroke,fill){goog.graphics.RectElement.call(this,element,graphics,stroke,fill);this.x_=x;this.y_=y;this.w_=w;this.h_=h};goog.inherits(goog.graphics.CanvasRectElement,goog.graphics.RectElement);goog.graphics.CanvasRectElement.prototype.setPosition=function(x,y){this.x_=x;this.y_=y;if(this.drawn_)this.getGraphics().redraw()};
goog.graphics.CanvasRectElement.prototype.drawn_=false;goog.graphics.CanvasRectElement.prototype.setSize=function(width,height){this.w_=width;this.h_=height;if(this.drawn_)this.getGraphics().redraw()};goog.graphics.CanvasRectElement.prototype.draw=function(ctx){this.drawn_=true;ctx.beginPath();ctx.moveTo(this.x_,this.y_);ctx.lineTo(this.x_,this.y_+this.h_);ctx.lineTo(this.x_+this.w_,this.y_+this.h_);ctx.lineTo(this.x_+this.w_,this.y_);ctx.closePath()};
goog.graphics.CanvasPathElement=function(element,graphics,path,stroke,fill){goog.graphics.PathElement.call(this,element,graphics,stroke,fill);this.setPath(path)};goog.inherits(goog.graphics.CanvasPathElement,goog.graphics.PathElement);goog.graphics.CanvasPathElement.prototype.drawn_=false;goog.graphics.CanvasPathElement.prototype.path_;goog.graphics.CanvasPathElement.prototype.setPath=function(path){this.path_=path.isSimple()?path:goog.graphics.Path.createSimplifiedPath(path);if(this.drawn_)this.getGraphics().redraw()};
goog.graphics.CanvasPathElement.prototype.draw=function(ctx){this.drawn_=true;ctx.beginPath();this.path_.forEachSegment(function(segment,args){switch(segment){case goog.graphics.Path.Segment.MOVETO:ctx.moveTo(args[0],args[1]);break;case goog.graphics.Path.Segment.LINETO:for(var i=0;i<args.length;i+=2)ctx.lineTo(args[i],args[i+1]);break;case goog.graphics.Path.Segment.CURVETO:for(var i=0;i<args.length;i+=6)ctx.bezierCurveTo(args[i],args[i+1],args[i+2],args[i+3],args[i+4],args[i+5]);break;case goog.graphics.Path.Segment.ARCTO:throw Error("Canvas paths cannot contain arcs");
case goog.graphics.Path.Segment.CLOSE:ctx.closePath();break}})};
goog.graphics.CanvasTextElement=function(graphics,text,x1,y1,x2,y2,align,font,stroke,fill){goog.graphics.TextElement.call(this,null,graphics,stroke,fill);this.text_=text;this.x1_=x1;this.y1_=y1;this.x2_=x2;this.y2_=y2;this.align_=align||"left";this.font_=font;this.element_=goog.dom.createDom("DIV",{style:"display:table;position:absolute;padding:0;margin:0;border:0"});this.innerElement_=goog.dom.createDom("DIV",{style:"display:table-cell;padding: 0;margin: 0;border: 0"});this.updateStyle_();this.updateText_();
graphics.getElement().appendChild(this.element_);this.element_.appendChild(this.innerElement_)};goog.inherits(goog.graphics.CanvasTextElement,goog.graphics.TextElement);goog.graphics.CanvasTextElement.prototype.setText=function(text){this.text_=text;this.updateText_()};goog.graphics.CanvasTextElement.prototype.setFill=function(fill){this.fill_=fill;if(this.element_)this.element_.style.color=fill.getColor()||fill.getColor1()};goog.graphics.CanvasTextElement.prototype.setStroke=function(stroke){};
goog.graphics.CanvasTextElement.prototype.draw=function(ctx){};
goog.graphics.CanvasTextElement.prototype.updateStyle_=function(){var x1=this.x1_;var x2=this.x2_;var y1=this.y1_;var y2=this.y2_;var align=this.align_;var font=this.font_;var style=this.element_.style;var scaleX=this.getGraphics().getPixelScaleX();var scaleY=this.getGraphics().getPixelScaleY();if(x1==x2){style.lineHeight="90%";this.innerElement_.style.verticalAlign=align=="center"?"middle":align=="left"?y1<y2?"top":"bottom":y1<y2?"bottom":"top";style.textAlign="center";var w=font.size*scaleX;style.top=
Math.round(Math.min(y1,y2)*scaleY)+"px";style.left=Math.round((x1-w/2)*scaleX)+"px";style.width=Math.round(w)+"px";style.height=Math.abs(y1-y2)*scaleY+"px";style.fontSize=font.size*0.6*scaleY+"pt"}else{style.lineHeight="100%";this.innerElement_.style.verticalAlign="top";style.textAlign=align;style.top=Math.round(((y1+y2)/2-font.size*2/3)*scaleY)+"px";style.left=Math.round(x1*scaleX)+"px";style.width=Math.round(Math.abs(x2-x1)*scaleX)+"px";style.height="auto";style.fontSize=font.size*scaleY+"pt"}style.fontWeight=
font.bold?"bold":"normal";style.fontStyle=font.italic?"italic":"normal";style.fontFamily=font.family;var fill=this.getFill();style.color=fill.getColor()||fill.getColor1()};goog.graphics.CanvasTextElement.prototype.updateText_=function(){if(this.x1_==this.x2_)this.innerElement_.innerHTML=goog.array.map(this.text_.split(""),goog.string.htmlEscape).join("<br>");else this.innerElement_.innerHTML=goog.string.htmlEscape(this.text_)};
goog.graphics.CanvasImageElement=function(element,graphics,x,y,w,h,src){goog.graphics.ImageElement.call(this,element,graphics);this.x_=x;this.y_=y;this.w_=w;this.h_=h;this.src_=src};goog.inherits(goog.graphics.CanvasImageElement,goog.graphics.ImageElement);goog.graphics.CanvasImageElement.prototype.drawn_=false;goog.graphics.CanvasImageElement.prototype.setPosition=function(x,y){this.x_=x;this.y_=y;if(this.drawn_)this.getGraphics().redraw()};
goog.graphics.CanvasImageElement.prototype.setSize=function(width,height){this.w_=width;this.h_=height;if(this.drawn_)this.getGraphics().redraw()};goog.graphics.CanvasImageElement.prototype.setSource=function(src){this.src_=src;if(this.drawn_)this.getGraphics().redraw()};
goog.graphics.CanvasImageElement.prototype.draw=function(ctx){if(this.img_){if(this.w_&&this.h_)ctx.drawImage(this.img_,this.x_,this.y_,this.w_,this.h_);this.drawn_=true}else{var img=new Image;img.onload=goog.bind(this.handleImageLoad_,this,img);img.src=this.src_}};goog.graphics.CanvasImageElement.prototype.handleImageLoad_=function(img){this.img_=img;this.getGraphics().redraw()};goog.provide("goog.graphics.Font");goog.graphics.Font=function(size,family){this.size=size;this.family=family};goog.graphics.Font.prototype.bold=false;goog.graphics.Font.prototype.italic=false;goog.provide("goog.graphics.Fill");goog.graphics.Fill=function(){};goog.provide("goog.graphics.LinearGradient");goog.require("goog.graphics.Fill");goog.graphics.LinearGradient=function(x1,y1,x2,y2,color1,color2){this.x1_=x1;this.y1_=y1;this.x2_=x2;this.y2_=y2;this.color1_=color1;this.color2_=color2};goog.inherits(goog.graphics.LinearGradient,goog.graphics.Fill);goog.graphics.LinearGradient.prototype.getX1=function(){return this.x1_};goog.graphics.LinearGradient.prototype.getY1=function(){return this.y1_};goog.graphics.LinearGradient.prototype.getX2=function(){return this.x2_};
goog.graphics.LinearGradient.prototype.getY2=function(){return this.y2_};goog.graphics.LinearGradient.prototype.getColor1=function(){return this.color1_};goog.graphics.LinearGradient.prototype.getColor2=function(){return this.color2_};goog.provide("goog.graphics.SolidFill");goog.require("goog.graphics.Fill");goog.graphics.SolidFill=function(color,opt_opacity){this.color_=color;this.opacity_=opt_opacity||1};goog.inherits(goog.graphics.SolidFill,goog.graphics.Fill);goog.graphics.SolidFill.prototype.getColor=function(){return this.color_};goog.graphics.SolidFill.prototype.getOpacity=function(){return this.opacity_};goog.provide("goog.graphics.Stroke");goog.graphics.Stroke=function(width,color){this.width_=width;this.color_=color};goog.graphics.Stroke.prototype.getWidth=function(){return this.width_};goog.graphics.Stroke.prototype.getColor=function(){return this.color_};goog.provide("goog.graphics.CanvasGraphics");goog.require("goog.dom");goog.require("goog.graphics.AbstractGraphics");goog.require("goog.graphics.CanvasEllipseElement");goog.require("goog.graphics.CanvasGroupElement");goog.require("goog.graphics.CanvasImageElement");goog.require("goog.graphics.CanvasPathElement");goog.require("goog.graphics.CanvasRectElement");goog.require("goog.graphics.CanvasTextElement");goog.require("goog.graphics.Font");goog.require("goog.graphics.LinearGradient");goog.require("goog.graphics.SolidFill");
goog.require("goog.graphics.Stroke");goog.require("goog.math.Size");goog.graphics.CanvasGraphics=function(width,height,opt_coordWidth,opt_coordHeight,opt_domHelper){goog.graphics.AbstractGraphics.call(this,width,height,opt_coordWidth,opt_coordHeight,opt_domHelper)};goog.inherits(goog.graphics.CanvasGraphics,goog.graphics.AbstractGraphics);goog.graphics.CanvasGraphics.prototype.setElementFill=function(element,fill){this.redraw()};
goog.graphics.CanvasGraphics.prototype.setElementStroke=function(element,stroke){this.redraw()};goog.graphics.CanvasGraphics.prototype.setElementTransform=function(element,x,y,angle,centerX,centerY){this.redraw()};goog.graphics.CanvasGraphics.prototype.pushElementTransform=function(element){var ctx=this.getContext();ctx.save();var transform=element.getTransform();var tx=transform.getTranslateX();var ty=transform.getTranslateY();if(tx||ty)ctx.translate(tx,ty);var sinTheta=transform.getShearY();if(sinTheta)ctx.rotate(Math.asin(sinTheta))};
goog.graphics.CanvasGraphics.prototype.popElementTransform=function(){this.getContext().restore()};goog.graphics.CanvasGraphics.prototype.createDom=function(){var element=this.dom_.createDom("div",{style:"position:relative;overflow:hidden"});this.setElementInternal(element);this.canvas_=this.dom_.createDom("canvas");element.appendChild(this.canvas_);this.canvasElement=new goog.graphics.CanvasGroupElement(this);this.lastGroup_=this.canvasElement;this.redrawTimeout_=0;this.updateSize()};
goog.graphics.CanvasGraphics.prototype.clearContext_=function(){this.context_=null};goog.graphics.CanvasGraphics.prototype.getContext=function(){if(!this.getElement())this.createDom();if(!this.context_){this.context_=this.canvas_.getContext("2d");this.context_.save()}return this.context_};goog.graphics.CanvasGraphics.prototype.setCoordOrigin=function(left,top){this.coordLeft=left;this.coordTop=top;this.redraw()};
goog.graphics.CanvasGraphics.prototype.setCoordSize=function(coordWidth,coordHeight){goog.graphics.CanvasGraphics.superClass_.setCoordSize.apply(this,arguments);this.redraw()};goog.graphics.CanvasGraphics.prototype.setSize=function(pixelWidth,pixelHeight){this.width=pixelWidth;this.height=pixelHeight;this.updateSize();this.redraw()};
goog.graphics.CanvasGraphics.prototype.getPixelSize=function(){var width=this.width;var height=this.height;var computeWidth=goog.isString(width)&&width.indexOf("%")!=-1;var computeHeight=goog.isString(height)&&height.indexOf("%")!=-1;if(!this.isInDocument()&&(computeWidth||computeHeight))return null;var parent;var parentSize;if(computeWidth){parent=this.getElement().parentNode;parentSize=goog.style.getSize(parent);width=parseFloat(width)*parentSize.width/100}if(computeHeight){parent=parent||this.getElement().parentNode;
parentSize=parentSize||goog.style.getSize(parent);height=parseFloat(height)*parentSize.height/100}return new goog.math.Size(width,height)};goog.graphics.CanvasGraphics.prototype.updateSize=function(){goog.style.setSize(this.getElement(),this.width,this.height);var pixels=this.getPixelSize();if(pixels){goog.style.setSize(this.canvas_,pixels.width,pixels.height);this.canvas_.width=pixels.width;this.canvas_.height=pixels.height;this.clearContext_()}};
goog.graphics.CanvasGraphics.prototype.reset=function(){var ctx=this.getContext();ctx.restore();var size=this.getPixelSize();if(size.width&&size.height)ctx.clearRect(0,0,size.width,size.height);ctx.save()};goog.graphics.CanvasGraphics.prototype.clear=function(){this.reset();this.canvasElement.clear();var el=this.getElement();while(el.childNodes.length>1)el.removeChild(el.lastChild)};
goog.graphics.CanvasGraphics.prototype.redraw=function(){if(this.preventRedraw_){this.needsRedraw_=true;return}if(this.isInDocument()){this.reset();if(this.coordWidth){var pixels=this.getPixelSize();this.getContext().scale(pixels.width/this.coordWidth,pixels.height/this.coordHeight)}if(this.coordLeft||this.coordTop)this.getContext().translate(-this.coordLeft,-this.coordTop);this.pushElementTransform(this.canvasElement);this.canvasElement.draw(this.context_);this.popElementTransform()}};
goog.graphics.CanvasGraphics.prototype.drawElement=function(element){if(element instanceof goog.graphics.CanvasTextElement)return;var ctx=this.getContext();this.pushElementTransform(element);if(!element.getFill||!element.getStroke){element.draw(ctx);this.popElementTransform();return}var fill=element.getFill();if(fill)if(fill instanceof goog.graphics.SolidFill){if(fill.getOpacity()!=0){ctx.globalAlpha=fill.getOpacity();ctx.fillStyle=fill.getColor();element.draw(ctx);ctx.fill();ctx.globalAlpha=1}}else{var linearGradient=
ctx.createLinearGradient(fill.getX1(),fill.getY1(),fill.getX2(),fill.getY2());linearGradient.addColorStop(0,fill.getColor1());linearGradient.addColorStop(1,fill.getColor2());ctx.fillStyle=linearGradient;element.draw(ctx);ctx.fill()}var stroke=element.getStroke();if(stroke){element.draw(ctx);ctx.strokeStyle=stroke.getColor();var width=stroke.getWidth();if(goog.isString(width)&&width.indexOf("px")!=-1)width=parseFloat(width)/this.getPixelScaleX();ctx.lineWidth=width;ctx.stroke()}this.popElementTransform()};
goog.graphics.CanvasGraphics.prototype.append_=function(element,group){group=group||this.canvasElement;group.appendChild(element);if(this.isDrawable(group))this.drawElement(element)};goog.graphics.CanvasGraphics.prototype.drawEllipse=function(cx,cy,rx,ry,stroke,fill,opt_group){var element=new goog.graphics.CanvasEllipseElement(null,this,cx,cy,rx,ry,stroke,fill);this.append_(element,opt_group);return element};
goog.graphics.CanvasGraphics.prototype.drawRect=function(x,y,width,height,stroke,fill,opt_group){var element=new goog.graphics.CanvasRectElement(null,this,x,y,width,height,stroke,fill);this.append_(element,opt_group);return element};goog.graphics.CanvasGraphics.prototype.drawImage=function(x,y,width,height,src,opt_group){var element=new goog.graphics.CanvasImageElement(null,this,x,y,width,height,src);this.append_(element,opt_group);return element};
goog.graphics.CanvasGraphics.prototype.drawTextOnLine=function(text,x1,y1,x2,y2,align,font,stroke,fill,opt_group){var element=new goog.graphics.CanvasTextElement(this,text,x1,y1,x2,y2,align,font,stroke,fill);this.append_(element,opt_group);return element};goog.graphics.CanvasGraphics.prototype.drawPath=function(path,stroke,fill,opt_group){var element=new goog.graphics.CanvasPathElement(null,this,path,stroke,fill);this.append_(element,opt_group);return element};
goog.graphics.CanvasGraphics.prototype.isDrawable=function(group){return this.isInDocument()&&!this.redrawTimeout_&&!this.isRedrawRequired(group)};goog.graphics.CanvasGraphics.prototype.isRedrawRequired=function(group){return group!=this.canvasElement&&group!=this.lastGroup_};
goog.graphics.CanvasGraphics.prototype.createGroup=function(opt_group){var group=new goog.graphics.CanvasGroupElement(this);opt_group=opt_group||this.canvasElement;if(opt_group==this.canvasElement||opt_group==this.lastGroup_)this.lastGroup_=group;this.append_(group,opt_group);return group};goog.graphics.CanvasGraphics.prototype.getTextWidth=goog.abstractMethod;goog.graphics.CanvasGraphics.prototype.disposeInternal=function(){this.context_=null;goog.graphics.CanvasGraphics.superClass_.disposeInternal.call(this)};
goog.graphics.CanvasGraphics.prototype.enterDocument=function(){var oldPixelSize=this.getPixelSize();goog.graphics.CanvasGraphics.superClass_.enterDocument.call(this);if(!oldPixelSize){this.updateSize();this.dispatchEvent(goog.events.EventType.RESIZE)}this.redraw()};goog.graphics.CanvasGraphics.prototype.suspend=function(){this.preventRedraw_=true};goog.graphics.CanvasGraphics.prototype.resume=function(){this.preventRedraw_=false;if(this.needsRedraw_){this.redraw();this.needsRedraw_=false}};goog.provide("goog.Timer");goog.require("goog.events.EventTarget");goog.Timer=function(opt_interval,opt_timerObject){goog.events.EventTarget.call(this);this.interval_=opt_interval||1;this.timerObject_=opt_timerObject||goog.Timer.defaultTimerObject;this.boundTick_=goog.bind(this.tick_,this);this.last_=goog.now()};goog.inherits(goog.Timer,goog.events.EventTarget);goog.Timer.MAX_TIMEOUT_=2147483647;goog.Timer.prototype.enabled=false;goog.Timer.defaultTimerObject=goog.global["window"];
goog.Timer.intervalScale=0.8;goog.Timer.prototype.timer_=null;goog.Timer.prototype.getInterval=function(){return this.interval_};goog.Timer.prototype.setInterval=function(interval){this.interval_=interval;if(this.timer_&&this.enabled){this.stop();this.start()}else if(this.timer_)this.stop()};
goog.Timer.prototype.tick_=function(){if(this.enabled){var elapsed=goog.now()-this.last_;if(elapsed>0&&elapsed<this.interval_*goog.Timer.intervalScale){this.timer_=this.timerObject_.setTimeout(this.boundTick_,this.interval_-elapsed);return}this.dispatchTick();if(this.enabled){this.timer_=this.timerObject_.setTimeout(this.boundTick_,this.interval_);this.last_=goog.now()}}};goog.Timer.prototype.dispatchTick=function(){this.dispatchEvent(goog.Timer.TICK)};
goog.Timer.prototype.start=function(){this.enabled=true;if(!this.timer_){this.timer_=this.timerObject_.setTimeout(this.boundTick_,this.interval_);this.last_=goog.now()}};goog.Timer.prototype.stop=function(){this.enabled=false;if(this.timer_){this.timerObject_.clearTimeout(this.timer_);this.timer_=null}};goog.Timer.prototype.disposeInternal=function(){goog.Timer.superClass_.disposeInternal.call(this);this.stop();delete this.timerObject_};goog.Timer.TICK="tick";
goog.Timer.callOnce=function(listener,opt_interval,opt_handler){if(goog.isFunction(listener)){if(opt_handler)listener=goog.bind(listener,opt_handler)}else if(listener&&typeof listener.handleEvent=="function")listener=goog.bind(listener.handleEvent,listener);else throw Error("Invalid listener argument");if(opt_interval>goog.Timer.MAX_TIMEOUT_)return-1;else return goog.Timer.defaultTimerObject.setTimeout(listener,opt_interval||0)};goog.Timer.clear=function(timerId){goog.Timer.defaultTimerObject.clearTimeout(timerId)};goog.provide("goog.graphics.SvgEllipseElement");goog.provide("goog.graphics.SvgGroupElement");goog.provide("goog.graphics.SvgImageElement");goog.provide("goog.graphics.SvgPathElement");goog.provide("goog.graphics.SvgRectElement");goog.provide("goog.graphics.SvgTextElement");goog.require("goog.dom");goog.require("goog.graphics.EllipseElement");goog.require("goog.graphics.GroupElement");goog.require("goog.graphics.ImageElement");goog.require("goog.graphics.PathElement");goog.require("goog.graphics.RectElement");
goog.require("goog.graphics.TextElement");goog.graphics.SvgGroupElement=function(element,graphics){goog.graphics.GroupElement.call(this,element,graphics)};goog.inherits(goog.graphics.SvgGroupElement,goog.graphics.GroupElement);goog.graphics.SvgGroupElement.prototype.clear=function(){goog.dom.removeChildren(this.getElement())};goog.graphics.SvgGroupElement.prototype.setSize=function(width,height){this.getGraphics().setElementAttributes(this.getElement(),{width:width,height:height})};
goog.graphics.SvgEllipseElement=function(element,graphics,stroke,fill){goog.graphics.EllipseElement.call(this,element,graphics,stroke,fill)};goog.inherits(goog.graphics.SvgEllipseElement,goog.graphics.EllipseElement);goog.graphics.SvgEllipseElement.prototype.setCenter=function(cx,cy){this.getGraphics().setElementAttributes(this.getElement(),{cx:cx,cy:cy})};goog.graphics.SvgEllipseElement.prototype.setRadius=function(rx,ry){this.getGraphics().setElementAttributes(this.getElement(),{rx:rx,ry:ry})};
goog.graphics.SvgRectElement=function(element,graphics,stroke,fill){goog.graphics.RectElement.call(this,element,graphics,stroke,fill)};goog.inherits(goog.graphics.SvgRectElement,goog.graphics.RectElement);goog.graphics.SvgRectElement.prototype.setPosition=function(x,y){this.getGraphics().setElementAttributes(this.getElement(),{x:x,y:y})};goog.graphics.SvgRectElement.prototype.setSize=function(width,height){this.getGraphics().setElementAttributes(this.getElement(),{width:width,height:height})};
goog.graphics.SvgPathElement=function(element,graphics,stroke,fill){goog.graphics.PathElement.call(this,element,graphics,stroke,fill)};goog.inherits(goog.graphics.SvgPathElement,goog.graphics.PathElement);goog.graphics.SvgPathElement.prototype.setPath=function(path){this.getGraphics().setElementAttributes(this.getElement(),{d:goog.graphics.SvgGraphics.getSvgPath(path)})};
goog.graphics.SvgTextElement=function(element,graphics,stroke,fill){goog.graphics.TextElement.call(this,element,graphics,stroke,fill)};goog.inherits(goog.graphics.SvgTextElement,goog.graphics.TextElement);goog.graphics.SvgTextElement.prototype.setText=function(text){this.getElement().firstChild.data=text};goog.graphics.SvgImageElement=function(element,graphics){goog.graphics.ImageElement.call(this,element,graphics)};goog.inherits(goog.graphics.SvgImageElement,goog.graphics.ImageElement);
goog.graphics.SvgImageElement.prototype.setPosition=function(x,y){this.getGraphics().setElementAttributes(this.getElement(),{x:x,y:y})};goog.graphics.SvgImageElement.prototype.setSize=function(width,height){this.getGraphics().setElementAttributes(this.getElement(),{width:width,height:height})};goog.graphics.SvgImageElement.prototype.setSource=function(src){this.getGraphics().setElementAttributes(this.getElement(),{"xlink:href":src})};goog.provide("goog.graphics.SvgGraphics");goog.require("goog.Timer");goog.require("goog.dom");goog.require("goog.events.EventHandler");goog.require("goog.graphics.AbstractGraphics");goog.require("goog.graphics.Font");goog.require("goog.graphics.LinearGradient");goog.require("goog.graphics.SolidFill");goog.require("goog.graphics.Stroke");goog.require("goog.graphics.SvgEllipseElement");goog.require("goog.graphics.SvgGroupElement");goog.require("goog.graphics.SvgImageElement");goog.require("goog.graphics.SvgPathElement");
goog.require("goog.graphics.SvgRectElement");goog.require("goog.graphics.SvgTextElement");goog.require("goog.math.Size");goog.require("goog.userAgent");goog.graphics.SvgGraphics=function(width,height,opt_coordWidth,opt_coordHeight,opt_domHelper){goog.graphics.AbstractGraphics.call(this,width,height,opt_coordWidth,opt_coordHeight,opt_domHelper);this.defs_={};this.useManualViewbox_=goog.userAgent.WEBKIT&&!goog.userAgent.isVersion(526);this.handler_=new goog.events.EventHandler(this)};
goog.inherits(goog.graphics.SvgGraphics,goog.graphics.AbstractGraphics);goog.graphics.SvgGraphics.SVG_NS_="http://www.w3.org/2000/svg";goog.graphics.SvgGraphics.DEF_ID_PREFIX_="_svgdef_";goog.graphics.SvgGraphics.nextDefId_=0;goog.graphics.SvgGraphics.prototype.defsElement_;
goog.graphics.SvgGraphics.prototype.createSvgElement_=function(tagName,opt_attributes){var element=this.dom_.getDocument().createElementNS(goog.graphics.SvgGraphics.SVG_NS_,tagName);if(opt_attributes)this.setElementAttributes(element,opt_attributes);return element};goog.graphics.SvgGraphics.prototype.setElementAttributes=function(element,attributes){for(var key in attributes)element.setAttribute(key,attributes[key])};
goog.graphics.SvgGraphics.prototype.append_=function(element,opt_group){var parent=opt_group||this.canvasElement;parent.getElement().appendChild(element.getElement())};
goog.graphics.SvgGraphics.prototype.setElementFill=function(element,fill){var svgElement=element.getElement();if(fill instanceof goog.graphics.SolidFill){svgElement.setAttribute("fill",fill.getColor());svgElement.setAttribute("fill-opacity",fill.getOpacity())}else if(fill instanceof goog.graphics.LinearGradient){var defKey="lg-"+fill.getX1()+"-"+fill.getY1()+"-"+fill.getX2()+"-"+fill.getY2()+"-"+fill.getColor1()+"-"+fill.getColor2();var id=this.getDef_(defKey);if(!id){var gradient=this.createSvgElement_("linearGradient",
{x1:fill.getX1(),y1:fill.getY1(),x2:fill.getX2(),y2:fill.getY2(),gradientUnits:"userSpaceOnUse"});var stop1=this.createSvgElement_("stop",{offset:"0%",style:"stop-color:"+fill.getColor1()});gradient.appendChild(stop1);var stop2=this.createSvgElement_("stop",{offset:"100%",style:"stop-color:"+fill.getColor2()});gradient.appendChild(stop2);id=this.addDef_(defKey,gradient)}svgElement.setAttribute("fill","url(#"+id+")")}else svgElement.setAttribute("fill","none")};
goog.graphics.SvgGraphics.prototype.setElementStroke=function(element,stroke){var svgElement=element.getElement();if(stroke){svgElement.setAttribute("stroke",stroke.getColor());var width=stroke.getWidth();if(goog.isString(width)&&width.indexOf("px")!=-1)svgElement.setAttribute("stroke-width",parseFloat(width)/this.getPixelScaleX());else svgElement.setAttribute("stroke-width",width)}else svgElement.setAttribute("stroke","none")};
goog.graphics.SvgGraphics.prototype.setElementTransform=function(element,x,y,angle,centerX,centerY){element.getElement().setAttribute("transform","translate("+x+","+y+") rotate("+angle+" "+centerX+" "+centerY+")")};
goog.graphics.SvgGraphics.prototype.createDom=function(){var attributes={width:this.width,height:this.height,overflow:"hidden"};var svgElement=this.createSvgElement_("svg",attributes);var groupElement=this.createSvgElement_("g");this.defsElement_=this.createSvgElement_("defs");this.canvasElement=new goog.graphics.SvgGroupElement(groupElement,this);svgElement.appendChild(this.defsElement_);svgElement.appendChild(groupElement);this.setElementInternal(svgElement);this.setViewBox_()};
goog.graphics.SvgGraphics.prototype.setCoordOrigin=function(left,top){this.coordLeft=left;this.coordTop=top;this.setViewBox_()};goog.graphics.SvgGraphics.prototype.setCoordSize=function(coordWidth,coordHeight){goog.graphics.SvgGraphics.superClass_.setCoordSize.apply(this,arguments);this.setViewBox_()};goog.graphics.SvgGraphics.prototype.getViewBox_=function(){return this.coordLeft+" "+this.coordTop+" "+(this.coordWidth?this.coordWidth+" "+this.coordHeight:"")};
goog.graphics.SvgGraphics.prototype.setViewBox_=function(){if(this.coordWidth||this.coordLeft||this.coordTop){this.getElement().setAttribute("preserveAspectRatio","none");if(this.useManualViewbox_)this.updateManualViewBox_();else this.getElement().setAttribute("viewBox",this.getViewBox_())}};
goog.graphics.SvgGraphics.prototype.updateManualViewBox_=function(){if(!this.isInDocument()||!(this.coordWidth||this.coordLeft||!this.coordTop))return;var size=this.getPixelSize();if(size.width==0){this.getElement().style.visibility="hidden";return}this.getElement().style.visibility="";var offsetX=-this.coordLeft;var offsetY=-this.coordTop;var scaleX=size.width/this.coordWidth;var scaleY=size.height/this.coordHeight;this.canvasElement.getElement().setAttribute("transform","scale("+scaleX+" "+scaleY+
") "+"translate("+offsetX+" "+offsetY+")")};goog.graphics.SvgGraphics.prototype.setSize=function(pixelWidth,pixelHeight){};
goog.graphics.SvgGraphics.prototype.getPixelSize=function(){if(!goog.userAgent.GECKO)return goog.style.getSize(this.getElement());var width=this.width;var height=this.height;var computeWidth=goog.isString(width)&&width.indexOf("%")!=-1;var computeHeight=goog.isString(height)&&height.indexOf("%")!=-1;if(!this.isInDocument()&&(computeWidth||computeHeight))return null;var parent;var parentSize;if(computeWidth){parent=this.getElement().parentNode;parentSize=goog.style.getSize(parent);width=parseFloat(width)*
parentSize.width/100}if(computeHeight){parent=parent||this.getElement().parentNode;parentSize=parentSize||goog.style.getSize(parent);height=parseFloat(height)*parentSize.height/100}return new goog.math.Size(width,height)};goog.graphics.SvgGraphics.prototype.clear=function(){this.canvasElement.clear();goog.dom.removeChildren(this.defsElement_);this.defs_={}};
goog.graphics.SvgGraphics.prototype.drawEllipse=function(cx,cy,rx,ry,stroke,fill,opt_group){var element=this.createSvgElement_("ellipse",{cx:cx,cy:cy,rx:rx,ry:ry});var wrapper=new goog.graphics.SvgEllipseElement(element,this,stroke,fill);this.append_(wrapper,opt_group);return wrapper};
goog.graphics.SvgGraphics.prototype.drawRect=function(x,y,width,height,stroke,fill,opt_group){var element=this.createSvgElement_("rect",{x:x,y:y,width:width,height:height});var wrapper=new goog.graphics.SvgRectElement(element,this,stroke,fill);this.append_(wrapper,opt_group);return wrapper};
goog.graphics.SvgGraphics.prototype.drawImage=function(x,y,width,height,src,opt_group){var element=this.createSvgElement_("image",{x:x,y:y,width:width,height:height,"image-rendering":"optimizeQuality",preserveAspectRatio:"none"});element.setAttributeNS("http://www.w3.org/1999/xlink","href",src);var wrapper=new goog.graphics.SvgImageElement(element,this);this.append_(wrapper,opt_group);return wrapper};
goog.graphics.SvgGraphics.prototype.drawTextOnLine=function(text,x1,y1,x2,y2,align,font,stroke,fill,opt_group){var angle=Math.round(goog.math.angle(x1,y1,x2,y2));var dx=x2-x1;var dy=y2-y1;var lineLength=Math.round(Math.sqrt(dx*dx+dy*dy));var fontSize=font.size;var attributes={"font-family":font.family,"font-size":fontSize};var baseline=Math.round(fontSize*0.85);var textY=Math.round(y1-fontSize/2+baseline);var textX=x1;if(align=="center"){textX+=Math.round(lineLength/2);attributes["text-anchor"]="middle"}else if(align==
"right"){textX+=lineLength;attributes["text-anchor"]="end"}attributes["x"]=textX;attributes["y"]=textY;if(font.bold)attributes["font-weight"]="bold";if(font.italic)attributes["font-style"]="italic";if(angle!=0)attributes["transform"]="rotate("+angle+" "+x1+" "+y1+")";var element=this.createSvgElement_("text",attributes);element.appendChild(this.dom_.getDocument().createTextNode(text));if(stroke==null&&goog.userAgent.GECKO&&goog.userAgent.MAC){var color="black";if(fill instanceof goog.graphics.SolidFill)color=
fill.getColor();stroke=new goog.graphics.Stroke(1,color)}var wrapper=new goog.graphics.SvgTextElement(element,this,stroke,fill);this.append_(wrapper,opt_group);return wrapper};goog.graphics.SvgGraphics.prototype.drawPath=function(path,stroke,fill,opt_group){var element=this.createSvgElement_("path",{d:goog.graphics.SvgGraphics.getSvgPath(path)});var wrapper=new goog.graphics.SvgPathElement(element,this,stroke,fill);this.append_(wrapper,opt_group);return wrapper};
goog.graphics.SvgGraphics.getSvgPath=function(path){var list=[];path.forEachSegment(function(segment,args){switch(segment){case goog.graphics.Path.Segment.MOVETO:list.push("M");Array.prototype.push.apply(list,args);break;case goog.graphics.Path.Segment.LINETO:list.push("L");Array.prototype.push.apply(list,args);break;case goog.graphics.Path.Segment.CURVETO:list.push("C");Array.prototype.push.apply(list,args);break;case goog.graphics.Path.Segment.ARCTO:var extent=args[3];var toAngle=args[2]+extent;
list.push("A",args[0],args[1],0,Math.abs(extent)>180?1:0,extent>0?1:0,args[4],args[5]);break;case goog.graphics.Path.Segment.CLOSE:list.push("Z");break}});return list.join(" ")};goog.graphics.SvgGraphics.prototype.createGroup=function(opt_group){var element=this.createSvgElement_("g");var parent=opt_group||this.canvasElement;parent.getElement().appendChild(element);return new goog.graphics.SvgGroupElement(element,this)};goog.graphics.SvgGraphics.prototype.getTextWidth=function(text,font){};
goog.graphics.SvgGraphics.prototype.addDef_=function(defKey,defElement){if(defKey in this.defs_)return this.defs_[defKey];var id=goog.graphics.SvgGraphics.DEF_ID_PREFIX_+goog.graphics.SvgGraphics.nextDefId_++;defElement.setAttribute("id",id);this.defs_[defKey]=id;var defs=this.defsElement_;defs.appendChild(defElement);return id};goog.graphics.SvgGraphics.prototype.getDef_=function(defKey){return defKey in this.defs_?this.defs_[defKey]:null};
goog.graphics.SvgGraphics.prototype.enterDocument=function(){var oldPixelSize=this.getPixelSize();goog.graphics.SvgGraphics.superClass_.enterDocument.call(this);if(!oldPixelSize)this.dispatchEvent(goog.events.EventType.RESIZE);if(this.useManualViewbox_){var width=this.width;var height=this.height;if(typeof width=="string"&&width.indexOf("%")!=-1&&typeof height=="string"&&height.indexOf("%")!=-1)this.handler_.listen(goog.graphics.SvgGraphics.getResizeCheckTimer_(),goog.Timer.TICK,this.updateManualViewBox_);
this.updateManualViewBox_()}};goog.graphics.SvgGraphics.prototype.exitDocument=function(){goog.graphics.SvgGraphics.superClass_.exitDocument.call(this);if(this.useManualViewbox_)this.handler_.unlisten(goog.graphics.SvgGraphics.getResizeCheckTimer_(),goog.Timer.TICK,this.updateManualViewBox_)};goog.graphics.SvgGraphics.prototype.disposeInternal=function(){delete this.defs_;delete this.defsElement_;delete this.canvasElement;goog.graphics.SvgGraphics.superClass_.disposeInternal.call(this)};goog.graphics.SvgGraphics.resizeCheckTimer_;
goog.graphics.SvgGraphics.getResizeCheckTimer_=function(){if(!goog.graphics.SvgGraphics.resizeCheckTimer_){goog.graphics.SvgGraphics.resizeCheckTimer_=new goog.Timer(400);goog.graphics.SvgGraphics.resizeCheckTimer_.start()}return goog.graphics.SvgGraphics.resizeCheckTimer_};goog.graphics.SvgGraphics.prototype.isDomClonable=function(){return true};goog.provide("goog.graphics.VmlEllipseElement");goog.provide("goog.graphics.VmlGroupElement");goog.provide("goog.graphics.VmlImageElement");goog.provide("goog.graphics.VmlPathElement");goog.provide("goog.graphics.VmlRectElement");goog.provide("goog.graphics.VmlTextElement");goog.require("goog.dom");goog.require("goog.graphics.EllipseElement");goog.require("goog.graphics.GroupElement");goog.require("goog.graphics.ImageElement");goog.require("goog.graphics.PathElement");goog.require("goog.graphics.RectElement");
goog.require("goog.graphics.TextElement");goog.graphics.vmlGetElement_=function(){this.element_=this.getGraphics().getVmlElement(this.id_)||this.element_;return this.element_};goog.graphics.VmlGroupElement=function(element,graphics){this.id_=element.id;goog.graphics.GroupElement.call(this,element,graphics)};goog.inherits(goog.graphics.VmlGroupElement,goog.graphics.GroupElement);goog.graphics.VmlGroupElement.prototype.getElement=goog.graphics.vmlGetElement_;
goog.graphics.VmlGroupElement.prototype.clear=function(){goog.dom.removeChildren(this.getElement())};goog.graphics.VmlGroupElement.prototype.isRootElement_=function(){return this.getGraphics().getCanvasElement()==this};
goog.graphics.VmlGroupElement.prototype.setSize=function(width,height){var element=this.getElement();var style=element.style;style.width=goog.graphics.VmlGraphics.toSizePx(width);style.height=goog.graphics.VmlGraphics.toSizePx(height);element.coordsize=goog.graphics.VmlGraphics.toSizeCoord(width)+" "+goog.graphics.VmlGraphics.toSizeCoord(height);if(!this.isRootElement_())element.coordorigin="0 0"};
goog.graphics.VmlEllipseElement=function(element,graphics,cx,cy,rx,ry,stroke,fill){this.id_=element.id;goog.graphics.EllipseElement.call(this,element,graphics,stroke,fill);this.cx=cx;this.cy=cy;this.rx=rx;this.ry=ry};goog.inherits(goog.graphics.VmlEllipseElement,goog.graphics.EllipseElement);goog.graphics.VmlEllipseElement.prototype.getElement=goog.graphics.vmlGetElement_;
goog.graphics.VmlEllipseElement.prototype.setCenter=function(cx,cy){this.cx=cx;this.cy=cy;goog.graphics.VmlGraphics.setPositionAndSize(this.getElement(),cx-this.rx,cy-this.ry,this.rx*2,this.ry*2)};goog.graphics.VmlEllipseElement.prototype.setRadius=function(rx,ry){this.rx=rx;this.ry=ry;goog.graphics.VmlGraphics.setPositionAndSize(this.getElement(),this.cx-rx,this.cy-ry,rx*2,ry*2)};
goog.graphics.VmlRectElement=function(element,graphics,stroke,fill){this.id_=element.id;goog.graphics.RectElement.call(this,element,graphics,stroke,fill)};goog.inherits(goog.graphics.VmlRectElement,goog.graphics.RectElement);goog.graphics.VmlRectElement.prototype.getElement=goog.graphics.vmlGetElement_;goog.graphics.VmlRectElement.prototype.setPosition=function(x,y){var style=this.getElement().style;style.left=goog.graphics.VmlGraphics.toPosPx(x);style.top=goog.graphics.VmlGraphics.toPosPx(y)};
goog.graphics.VmlRectElement.prototype.setSize=function(width,height){var style=this.getElement().style;style.width=goog.graphics.VmlGraphics.toSizePx(width);style.height=goog.graphics.VmlGraphics.toSizePx(height)};goog.graphics.VmlPathElement=function(element,graphics,stroke,fill){this.id_=element.id;goog.graphics.PathElement.call(this,element,graphics,stroke,fill)};goog.inherits(goog.graphics.VmlPathElement,goog.graphics.PathElement);goog.graphics.VmlPathElement.prototype.getElement=goog.graphics.vmlGetElement_;
goog.graphics.VmlPathElement.prototype.setPath=function(path){goog.graphics.VmlGraphics.setAttribute(this.getElement(),"path",goog.graphics.VmlGraphics.getVmlPath(path))};goog.graphics.VmlTextElement=function(element,graphics,stroke,fill){this.id_=element.id;goog.graphics.TextElement.call(this,element,graphics,stroke,fill)};goog.inherits(goog.graphics.VmlTextElement,goog.graphics.TextElement);goog.graphics.VmlTextElement.prototype.getElement=goog.graphics.vmlGetElement_;
goog.graphics.VmlTextElement.prototype.setText=function(text){goog.graphics.VmlGraphics.setAttribute(this.getElement().childNodes[1],"string",text)};goog.graphics.VmlImageElement=function(element,graphics){this.id_=element.id;goog.graphics.ImageElement.call(this,element,graphics)};goog.inherits(goog.graphics.VmlImageElement,goog.graphics.ImageElement);goog.graphics.VmlImageElement.prototype.getElement=goog.graphics.vmlGetElement_;
goog.graphics.VmlImageElement.prototype.setPosition=function(x,y){var style=this.getElement().style;style.left=goog.graphics.VmlGraphics.toPosPx(x);style.top=goog.graphics.VmlGraphics.toPosPx(y)};goog.graphics.VmlImageElement.prototype.setSize=function(width,height){var style=this.getElement().style;style.width=goog.graphics.VmlGraphics.toPosPx(width);style.height=goog.graphics.VmlGraphics.toPosPx(height)};
goog.graphics.VmlImageElement.prototype.setSource=function(src){goog.graphics.VmlGraphics.setAttribute(this.getElement(),"src",src)};goog.provide("goog.graphics.VmlGraphics");goog.require("goog.array");goog.require("goog.dom");goog.require("goog.events.EventHandler");goog.require("goog.graphics.AbstractGraphics");goog.require("goog.graphics.Font");goog.require("goog.graphics.LinearGradient");goog.require("goog.graphics.SolidFill");goog.require("goog.graphics.Stroke");goog.require("goog.graphics.VmlEllipseElement");goog.require("goog.graphics.VmlGroupElement");goog.require("goog.graphics.VmlImageElement");goog.require("goog.graphics.VmlPathElement");
goog.require("goog.graphics.VmlRectElement");goog.require("goog.graphics.VmlTextElement");goog.require("goog.math.Size");goog.require("goog.string");goog.graphics.VmlGraphics=function(width,height,opt_coordWidth,opt_coordHeight,opt_domHelper){goog.graphics.AbstractGraphics.call(this,width,height,opt_coordWidth,opt_coordHeight,opt_domHelper);this.handler_=new goog.events.EventHandler(this)};goog.inherits(goog.graphics.VmlGraphics,goog.graphics.AbstractGraphics);
goog.graphics.VmlGraphics.VML_PREFIX_="g_vml_";goog.graphics.VmlGraphics.VML_NS_="urn:schemas-microsoft-com:vml";goog.graphics.VmlGraphics.VML_IMPORT_="#default#VML";goog.graphics.VmlGraphics.IE8_MODE_=document.documentMode&&document.documentMode>=8;goog.graphics.VmlGraphics.COORD_MULTIPLIER=100;goog.graphics.VmlGraphics.toCssSize=function(size){return goog.isString(size)&&goog.string.endsWith(size,"%")?size:parseFloat(size.toString())+"px"};
goog.graphics.VmlGraphics.toPosCoord=function(number){return Math.round((parseFloat(number.toString())-0.5)*goog.graphics.VmlGraphics.COORD_MULTIPLIER)};goog.graphics.VmlGraphics.toPosPx=function(number){return goog.graphics.VmlGraphics.toPosCoord(number)+"px"};goog.graphics.VmlGraphics.toSizeCoord=function(number){return Math.round(parseFloat(number.toString())*goog.graphics.VmlGraphics.COORD_MULTIPLIER)};
goog.graphics.VmlGraphics.toSizePx=function(number){return goog.graphics.VmlGraphics.toSizeCoord(number)+"px"};goog.graphics.VmlGraphics.setAttribute=function(element,name,value){if(goog.graphics.VmlGraphics.IE8_MODE_)element[name]=value;else element.setAttribute(name,value)};goog.graphics.VmlGraphics.prototype.handler_;
goog.graphics.VmlGraphics.prototype.createVmlElement=function(tagName){var element=this.dom_.createElement(goog.graphics.VmlGraphics.VML_PREFIX_+":"+tagName);element.id=goog.string.createUniqueString();return element};goog.graphics.VmlGraphics.prototype.getVmlElement=function(id){return this.dom_.getElement(id)};goog.graphics.VmlGraphics.prototype.updateGraphics_=function(){if(goog.graphics.VmlGraphics.IE8_MODE_&&this.isInDocument())this.getElement().innerHTML=this.getElement().innerHTML};
goog.graphics.VmlGraphics.prototype.append_=function(element,opt_group){var parent=opt_group||this.canvasElement;parent.getElement().appendChild(element.getElement());this.updateGraphics_()};
goog.graphics.VmlGraphics.prototype.setElementFill=function(element,fill){var vmlElement=element.getElement();this.removeFill(vmlElement);if(fill instanceof goog.graphics.SolidFill)if(fill.getColor()=="transparent")vmlElement.filled=false;else if(fill.getOpacity()!=1){vmlElement.filled=true;var fillNode=this.createVmlElement("fill");fillNode.opacity=Math.round(fill.getOpacity()*100)+"%";fillNode.color=fill.getColor();vmlElement.appendChild(fillNode)}else{vmlElement.filled=true;vmlElement.fillcolor=
fill.getColor()}else if(fill instanceof goog.graphics.LinearGradient){vmlElement.filled=true;var gradient=this.createVmlElement("fill");gradient.color=fill.getColor1();gradient.color2=fill.getColor2();var angle=goog.math.angle(fill.getX1(),fill.getY1(),fill.getX2(),fill.getY2());angle=Math.round(goog.math.standardAngle(270-angle));gradient.angle=angle;gradient.type="gradient";vmlElement.appendChild(gradient)}else vmlElement.filled=false;this.updateGraphics_()};
goog.graphics.VmlGraphics.prototype.setElementStroke=function(element,stroke){var vmlElement=element.getElement();if(stroke){vmlElement.stroked=true;var width=stroke.getWidth();if(goog.isString(width)&&width.indexOf("px")==-1)width=parseFloat(width);else width=width*this.getPixelScaleX();var strokeElement=vmlElement.getElementsByTagName("stroke")[0];if(width<1){strokeElement=strokeElement||this.createVmlElement("stroke");strokeElement.opacity=width;strokeElement.weight="1px";strokeElement.color=stroke.getColor();
vmlElement.appendChild(strokeElement)}else{if(strokeElement)vmlElement.removeChild(strokeElement);vmlElement.strokecolor=stroke.getColor();vmlElement.strokeweight=width+"px"}}else vmlElement.stroked=false;this.updateGraphics_()};
goog.graphics.VmlGraphics.prototype.setElementTransform=function(element,x,y,angle,centerX,centerY){var el=element.getElement();el.style.left=goog.graphics.VmlGraphics.toPosPx(x);el.style.top=goog.graphics.VmlGraphics.toPosPx(y);if(angle||el.rotation){el.rotation=angle;el.coordsize=goog.graphics.VmlGraphics.toSizeCoord(centerX*2)+" "+goog.graphics.VmlGraphics.toSizeCoord(centerY*2)}};
goog.graphics.VmlGraphics.prototype.removeFill=function(element){element.fillcolor="";var v=element.childNodes.length;for(var i=0;i<element.childNodes.length;i++){var child=element.childNodes[i];if(child.tagName=="fill")element.removeChild(child)}};
goog.graphics.VmlGraphics.setPositionAndSize=function(element,left,top,width,height){var style=element.style;style.position="absolute";style.left=goog.graphics.VmlGraphics.toPosPx(left);style.top=goog.graphics.VmlGraphics.toPosPx(top);style.width=goog.graphics.VmlGraphics.toSizePx(width);style.height=goog.graphics.VmlGraphics.toSizePx(height);if(element.tagName=="shape")element.coordsize=goog.graphics.VmlGraphics.toSizeCoord(width)+" "+goog.graphics.VmlGraphics.toSizeCoord(height)};
goog.graphics.VmlGraphics.prototype.createFullSizeElement_=function(type){var element=this.createVmlElement(type);var size=this.getCoordSize();goog.graphics.VmlGraphics.setPositionAndSize(element,0,0,size.width,size.height);return element};try{eval("document.namespaces")}catch(ex){}
goog.graphics.VmlGraphics.prototype.createDom=function(){var doc=this.dom_.getDocument();if(!doc.namespaces[goog.graphics.VmlGraphics.VML_PREFIX_]){if(goog.graphics.VmlGraphics.IE8_MODE_)doc.namespaces.add(goog.graphics.VmlGraphics.VML_PREFIX_,goog.graphics.VmlGraphics.VML_NS_,goog.graphics.VmlGraphics.VML_IMPORT_);else doc.namespaces.add(goog.graphics.VmlGraphics.VML_PREFIX_,goog.graphics.VmlGraphics.VML_NS_);var ss=doc.createStyleSheet();ss.cssText=goog.graphics.VmlGraphics.VML_PREFIX_+"\\:*"+"{behavior:url(#default#VML)}"}var pixelWidth=
this.width;var pixelHeight=this.height;var divElement=this.dom_.createDom("div",{style:"overflow:hidden;position:relative;width:"+goog.graphics.VmlGraphics.toCssSize(pixelWidth)+";height:"+goog.graphics.VmlGraphics.toCssSize(pixelHeight)});this.setElementInternal(divElement);var group=this.createVmlElement("group");var style=group.style;style.position="absolute";style.left=style.top=0;style.width=this.width;style.height=this.height;if(this.coordWidth)group.coordsize=goog.graphics.VmlGraphics.toSizeCoord(this.coordWidth)+
" "+goog.graphics.VmlGraphics.toSizeCoord(this.coordHeight);else group.coordsize=goog.graphics.VmlGraphics.toSizeCoord(pixelWidth)+" "+goog.graphics.VmlGraphics.toSizeCoord(pixelHeight);if(goog.isDef(this.coordLeft))group.coordorigin=goog.graphics.VmlGraphics.toSizeCoord(this.coordLeft)+" "+goog.graphics.VmlGraphics.toSizeCoord(this.coordTop);else group.coordorigin="0 0";divElement.appendChild(group);this.canvasElement=new goog.graphics.VmlGroupElement(group,this);goog.events.listen(divElement,goog.events.EventType.RESIZE,
goog.bind(this.handleContainerResize_,this))};goog.graphics.VmlGraphics.prototype.handleContainerResize_=function(){var size=goog.style.getSize(this.getElement());var style=this.canvasElement.getElement().style;if(size.width){style.width=size.width+"px";style.height=size.height+"px"}else{var current=this.getElement();while(current&&current.currentStyle&&current.currentStyle.display!="none")current=current.parentNode;if(current&&current.currentStyle)this.handler_.listen(current,"propertychange",this.handleContainerResize_)}this.dispatchEvent(goog.events.EventType.RESIZE)};
goog.graphics.VmlGraphics.prototype.handlePropertyChange_=function(e){var prop=e.getBrowserEvent().propertyName;if(prop=="display"||prop=="className"){this.handler_.unlisten(e.target,"propertychange",this.handlePropertyChange_);this.handleContainerResize_()}};goog.graphics.VmlGraphics.prototype.setCoordOrigin=function(left,top){this.coordLeft=left;this.coordTop=top;this.canvasElement.getElement().coordorigin=goog.graphics.VmlGraphics.toSizeCoord(this.coordLeft)+" "+goog.graphics.VmlGraphics.toSizeCoord(this.coordTop)};
goog.graphics.VmlGraphics.prototype.setCoordSize=function(coordWidth,coordHeight){goog.graphics.VmlGraphics.superClass_.setCoordSize.apply(this,arguments);this.canvasElement.getElement().coordsize=goog.graphics.VmlGraphics.toSizeCoord(coordWidth)+" "+goog.graphics.VmlGraphics.toSizeCoord(coordHeight)};goog.graphics.VmlGraphics.prototype.setSize=function(pixelWidth,pixelHeight){};
goog.graphics.VmlGraphics.prototype.getPixelSize=function(){var el=this.getElement();return new goog.math.Size(el.style.pixelWidth||el.offsetWidth||1,el.style.pixelHeight||el.offsetHeight||1)};goog.graphics.VmlGraphics.prototype.clear=function(){this.canvasElement.clear()};
goog.graphics.VmlGraphics.prototype.drawEllipse=function(cx,cy,rx,ry,stroke,fill,opt_group){var element=this.createVmlElement("oval");goog.graphics.VmlGraphics.setPositionAndSize(element,cx-rx,cy-ry,rx*2,ry*2);var wrapper=new goog.graphics.VmlEllipseElement(element,this,cx,cy,rx,ry,stroke,fill);this.append_(wrapper,opt_group);return wrapper};
goog.graphics.VmlGraphics.prototype.drawRect=function(x,y,width,height,stroke,fill,opt_group){var element=this.createVmlElement("rect");goog.graphics.VmlGraphics.setPositionAndSize(element,x,y,width,height);var wrapper=new goog.graphics.VmlRectElement(element,this,stroke,fill);this.append_(wrapper,opt_group);return wrapper};
goog.graphics.VmlGraphics.prototype.drawImage=function(x,y,width,height,src,opt_group){var element=this.createVmlElement("image");goog.graphics.VmlGraphics.setPositionAndSize(element,x,y,width,height);goog.graphics.VmlGraphics.setAttribute(element,"src",src);var wrapper=new goog.graphics.VmlImageElement(element,this);this.append_(wrapper,opt_group);return wrapper};
goog.graphics.VmlGraphics.prototype.drawTextOnLine=function(text,x1,y1,x2,y2,align,font,stroke,fill,opt_group){var shape=this.createFullSizeElement_("shape");var pathElement=this.createVmlElement("path");var path="M"+goog.graphics.VmlGraphics.toPosCoord(x1)+","+goog.graphics.VmlGraphics.toPosCoord(y1)+"L"+goog.graphics.VmlGraphics.toPosCoord(x2)+","+goog.graphics.VmlGraphics.toPosCoord(y2)+"E";goog.graphics.VmlGraphics.setAttribute(pathElement,"v",path);goog.graphics.VmlGraphics.setAttribute(pathElement,
"textpathok","true");var textPathElement=this.createVmlElement("textpath");textPathElement.setAttribute("on","true");var style=textPathElement.style;style.fontSize=font.size*this.getPixelScaleX();style.fontFamily=font.family;if(align!=null)style["v-text-align"]=align;if(font.bold)style.fontWeight="bold";if(font.italic)style.fontStyle="italic";goog.graphics.VmlGraphics.setAttribute(textPathElement,"string",text);shape.appendChild(pathElement);shape.appendChild(textPathElement);var wrapper=new goog.graphics.VmlTextElement(shape,
this,stroke,fill);this.append_(wrapper,opt_group);return wrapper};goog.graphics.VmlGraphics.prototype.drawPath=function(path,stroke,fill,opt_group){var element=this.createFullSizeElement_("shape");goog.graphics.VmlGraphics.setAttribute(element,"path",goog.graphics.VmlGraphics.getVmlPath(path));var wrapper=new goog.graphics.VmlPathElement(element,this,stroke,fill);this.append_(wrapper,opt_group);return wrapper};
goog.graphics.VmlGraphics.getVmlPath=function(path){var list=[];path.forEachSegment(function(segment,args){switch(segment){case goog.graphics.Path.Segment.MOVETO:list.push("m");Array.prototype.push.apply(list,goog.array.map(args,goog.graphics.VmlGraphics.toSizeCoord));break;case goog.graphics.Path.Segment.LINETO:list.push("l");Array.prototype.push.apply(list,goog.array.map(args,goog.graphics.VmlGraphics.toSizeCoord));break;case goog.graphics.Path.Segment.CURVETO:list.push("c");Array.prototype.push.apply(list,
goog.array.map(args,goog.graphics.VmlGraphics.toSizeCoord));break;case goog.graphics.Path.Segment.CLOSE:list.push("x");break;case goog.graphics.Path.Segment.ARCTO:var toAngle=args[2]+args[3];var cx=goog.graphics.VmlGraphics.toSizeCoord(args[4]-goog.math.angleDx(toAngle,args[0]));var cy=goog.graphics.VmlGraphics.toSizeCoord(args[5]-goog.math.angleDy(toAngle,args[1]));var rx=goog.graphics.VmlGraphics.toSizeCoord(args[0]);var ry=goog.graphics.VmlGraphics.toSizeCoord(args[1]);var fromAngle=Math.round(args[2]*
-65536);var extent=Math.round(args[3]*-65536);list.push("ae",cx,cy,rx,ry,fromAngle,extent);break}});return list.join(" ")};goog.graphics.VmlGraphics.prototype.createGroup=function(opt_group){var element=this.createFullSizeElement_("group");var parent=opt_group||this.canvasElement;parent.getElement().appendChild(element);return new goog.graphics.VmlGroupElement(element,this)};goog.graphics.VmlGraphics.prototype.getTextWidth=function(text,font){return 0};
goog.graphics.VmlGraphics.prototype.enterDocument=function(){goog.graphics.VmlGraphics.superClass_.enterDocument.call(this);this.handleContainerResize_();this.updateGraphics_()};goog.graphics.VmlGraphics.prototype.disposeInternal=function(){this.canvasElement=null;goog.graphics.VmlGraphics.superClass_.disposeInternal.call(this)};goog.provide("goog.graphics");goog.require("goog.graphics.CanvasGraphics");goog.require("goog.graphics.SvgGraphics");goog.require("goog.graphics.VmlGraphics");goog.require("goog.userAgent");
goog.graphics.createGraphics=function(width,height,opt_coordWidth,opt_coordHeight,opt_domHelper){var graphics;if(goog.userAgent.IE)graphics=new goog.graphics.VmlGraphics(width,height,opt_coordWidth,opt_coordHeight,opt_domHelper);else if(goog.userAgent.WEBKIT&&(!goog.userAgent.isVersion("420")||goog.userAgent.MOBILE))graphics=new goog.graphics.CanvasGraphics(width,height,opt_coordWidth,opt_coordHeight,opt_domHelper);else graphics=new goog.graphics.SvgGraphics(width,height,opt_coordWidth,opt_coordHeight,
opt_domHelper);graphics.createDom();return graphics};goog.graphics.createSimpleGraphics=function(width,height,opt_coordWidth,opt_coordHeight,opt_domHelper){if(goog.userAgent.MAC&&goog.userAgent.GECKO&&!goog.userAgent.isVersion("1.9a")){var graphics=new goog.graphics.CanvasGraphics(width,height,opt_coordWidth,opt_coordHeight,opt_domHelper);graphics.createDom();return graphics}return goog.graphics.createGraphics(width,height,opt_coordWidth,opt_coordHeight,opt_domHelper)};
goog.graphics.isBrowserSupported=function(){if(goog.userAgent.IE)return goog.userAgent.isVersion("5.5");if(goog.userAgent.GECKO)return goog.userAgent.isVersion("1.8");if(goog.userAgent.OPERA)return goog.userAgent.isVersion("9.0");if(goog.userAgent.WEBKIT)return goog.userAgent.isVersion("412");return false};goog.provide("kemia.view.ArrowRenderer");goog.require("kemia.view.Renderer");goog.require("goog.graphics");kemia.view.ArrowRenderer=function(controller,graphics,opt_config){kemia.view.Renderer.call(this,controller,graphics,opt_config,kemia.view.ArrowRenderer.defaultConfig)};goog.inherits(kemia.view.ArrowRenderer,kemia.view.Renderer);
kemia.view.ArrowRenderer.prototype.render=function(coord,reagents_text,conditions_text,transform){this.transform=transform;var w=this.config.get("arrow")["width"];var h=this.config.get("arrow")["height"];var nock=new goog.math.Coordinate(coord.x-w/2,coord.y);var tip=new goog.math.Coordinate(nock.x+w,nock.y);var head1=new goog.math.Coordinate(tip.x-h,tip.y+h/2);var head2=new goog.math.Coordinate(tip.x-h,tip.y-h/2);var reagents=new goog.math.Coordinate(coord.x,coord.y+h);var conditions=new goog.math.Coordinate(coord.x,
coord.y-h);var path=new goog.graphics.Path;var arrowStroke=new goog.graphics.Stroke(this.config.get("arrow")["stroke"]["width"],this.config.get("arrow")["stroke"]["color"]);var textStroke=new goog.graphics.Stroke(this.config.get("arrow")["font"]["stroke"]["width"],this.config.get("arrow")["font"]["stroke"]["color"]);var fill=new goog.graphics.SolidFill(this.config.get("arrow")["font"]["stroke"]["color"]);var scale=transform.getScaleX();var fontSize=scale/1.8>12?15:scale/1.8;var font=new goog.graphics.Font(fontSize,
this.config.get("arrow")["font"]["name"]);var coords=transform.transformCoords([nock,tip,head1,head2,reagents,conditions]);path.moveTo(coords[0].x,coords[0].y);path.lineTo(coords[1].x,coords[1].y);path.lineTo(coords[2].x,coords[2].y);path.moveTo(coords[1].x,coords[1].y);path.lineTo(coords[3].x,coords[3].y);this.graphics.drawText(reagents_text,coords[4].x,coords[4].y,w,h,"center","bottom",font,textStroke,fill);this.graphics.drawText(conditions_text,coords[5].x,coords[5].y,w,h,"center","top",font,textStroke,
fill);this.graphics.drawPath(path,arrowStroke)};
kemia.view.ArrowRenderer.prototype.highlightOn=function(coord,opt_group){if(!opt_group)opt_group=this.graphics.createGroup();var color=this.config.get("arrow")["highlight"]["color"];var stroke=null;var fill=new goog.graphics.SolidFill(color,0.3);var radius=this.config.get("arrow")["highlight"]["radius"]*this.transform.getScaleX();var coords=this.transform.transformCoords([coord])[0];this.graphics.drawCircle(coords.x,coords.y,radius,stroke,fill,opt_group);return opt_group};
kemia.view.ArrowRenderer.defaultConfig={arrow:{width:2,height:0.5,stroke:{width:2,color:"black"},fill:{color:"black"},font:{name:"Arial",stroke:{width:0.1,color:"grey"}},highlight:{radius:0.5,color:"grey"}}};goog.provide("kemia.view.PlusRenderer");goog.require("kemia.view.Renderer");kemia.view.PlusRenderer=function(controller,graphics,opt_config){kemia.view.Renderer.call(this,controller,graphics,opt_config,kemia.view.PlusRenderer.defaultConfig)};goog.inherits(kemia.view.PlusRenderer,kemia.view.Renderer);
kemia.view.PlusRenderer.prototype.render=function(coord,transform){var w=this.config.get("plus")["size"];h0=new goog.math.Coordinate(coord.x,coord.y-w);h1=new goog.math.Coordinate(coord.x,coord.y+w);v0=new goog.math.Coordinate(coord.x-w,coord.y);v1=new goog.math.Coordinate(coord.x+w,coord.y);var path=new goog.graphics.Path;var stroke=new goog.graphics.Stroke(this.config.get("plus")["stroke"]["width"],this.config.get("plus")["stroke"]["color"]);var coords=transform.transformCoords([h0,h1,v0,v1]);path.moveTo(coords[0].x,
coords[0].y);path.lineTo(coords[1].x,coords[1].y);path.moveTo(coords[2].x,coords[2].y);path.lineTo(coords[3].x,coords[3].y);this.graphics.drawPath(path,stroke,null)};kemia.view.PlusRenderer.defaultConfig={plus:{size:0.25,stroke:{width:2,color:"black"}}};goog.provide("kemia.graphics.AffineTransform");goog.require("goog.graphics.AffineTransform");kemia.graphics.AffineTransform=function(opt_m00,opt_m10,opt_m01,opt_m11,opt_m02,opt_m12){goog.graphics.AffineTransform.call(this);if(arguments.length==6)this.setTransform(opt_m00,opt_m10,opt_m01,opt_m11,opt_m02,opt_m12)};goog.inherits(kemia.graphics.AffineTransform,goog.graphics.AffineTransform);
kemia.graphics.AffineTransform.transformCoords=function(trans,source_coords){var pairs=goog.array.map(source_coords,function(coord){return[coord.x,coord.y]});var source_points=goog.array.flatten(pairs);var dest_points=[];trans.transform(source_points,0,dest_points,0,source_points.length/2);var dest_coords=[];for(var i=0;i<dest_points.length;i+=2)dest_coords.push(new goog.math.Coordinate(dest_points[i],dest_points[i+1]));return dest_coords};
kemia.graphics.AffineTransform.prototype.transformCoords=function(source_coords){return kemia.graphics.AffineTransform.transformCoords(this,source_coords)};kemia.graphics.AffineTransform.prototype.createInverse=function(){var det=this.getDeterminant();return new kemia.graphics.AffineTransform(this.m11_/det,-this.m10_/det,-this.m01_/det,this.m00_/det,(this.m01_*this.m12_-this.m11_*this.m02_)/det,(this.m10_*this.m02_-this.m00_*this.m12_)/det)};
kemia.graphics.AffineTransform.getRotateInstance=function(theta,x,y){return(new kemia.graphics.AffineTransform).setToRotation(theta,x,y)};goog.provide("kemia.view.ReactionRenderer");goog.require("kemia.view.Renderer");goog.require("kemia.controller.MoleculeController");goog.require("kemia.controller.ArrowController");goog.require("kemia.controller.PlusController");goog.require("kemia.view.MoleculeRenderer");goog.require("kemia.view.ArrowRenderer");goog.require("kemia.view.PlusRenderer");goog.require("goog.math.Coordinate");goog.require("kemia.graphics.AffineTransform");
kemia.view.ReactionRenderer=function(controller,graphics,opt_config){kemia.view.Renderer.call(this,controller,graphics,opt_config,kemia.view.ReactionRenderer.defaultConfig);this.scale_factor=1;this.moleculeController=new kemia.controller.MoleculeController(controller);this.moleculeRenderer=new kemia.view.MoleculeRenderer(this.moleculeController,graphics,this.config);this.arrowController=new kemia.controller.ArrowController(controller);this.arrowRenderer=new kemia.view.ArrowRenderer(this.arrowController,
graphics,this.config);this.plusController=new kemia.controller.PlusController(controller);this.plusRenderer=new kemia.view.PlusRenderer(this.plusController,graphics,this.config)};goog.inherits(kemia.view.ReactionRenderer,kemia.view.Renderer);
kemia.view.ReactionRenderer.prototype.render=function(reaction){var molecules=goog.array.concat(reaction.reactants,reaction.products);if(molecules.length>0){if(!this.transform){var box=this.boundingBox(molecules);var m=this.config.get("margin");box.expand(m.top,m.right,m.bottom,m.left);this.transform=this.buildTransform(box)}goog.array.forEach(molecules,function(mol){this.moleculeRenderer.render(mol,this.transform)},this);goog.array.forEach(reaction.pluses,function(plus){this.plusRenderer.render(plus,
this.transform)},this);goog.array.forEach(reaction.arrows,function(arrow){this.arrowRenderer.render(arrow,reaction.reagentsText,reaction.conditionsText,this.transform)},this)}};kemia.view.ReactionRenderer.prototype.boundingBox=function(molecules){var atoms=goog.array.flatten(goog.array.map(molecules,function(mol){return mol.atoms}));var coords=goog.array.map(atoms,function(a){return a.coord});if(coords.length>0)return goog.math.Box.boundingBox.apply(null,coords)};
kemia.view.ReactionRenderer.prototype.logger=goog.debug.Logger.getLogger("kemia.view.ReactionRenderer");kemia.view.ReactionRenderer.defaultConfig={margin:2};goog.provide("goog.fx.DragEvent");goog.provide("goog.fx.Dragger");goog.provide("goog.fx.Dragger.EventType");goog.require("goog.dom");goog.require("goog.events");goog.require("goog.events.BrowserEvent.MouseButton");goog.require("goog.events.Event");goog.require("goog.events.EventHandler");goog.require("goog.events.EventTarget");goog.require("goog.events.EventType");goog.require("goog.math.Coordinate");goog.require("goog.math.Rect");goog.require("goog.userAgent");
goog.fx.Dragger=function(target,opt_handle,opt_limits){this.target=target;this.handle=opt_handle||target;this.limits=opt_limits||new goog.math.Rect(NaN,NaN,NaN,NaN);this.document_=goog.dom.getOwnerDocument(target);this.eventHandler_=new goog.events.EventHandler(this);goog.events.listen(this.handle,goog.events.EventType.MOUSEDOWN,this.startDrag,false,this)};goog.inherits(goog.fx.Dragger,goog.events.EventTarget);goog.fx.Dragger.HAS_SET_CAPTURE_=goog.userAgent.IE||goog.userAgent.GECKO&&goog.userAgent.isVersion("1.9.3");
goog.fx.Dragger.EventType={START:"start",BEFOREDRAG:"beforedrag",DRAG:"drag",END:"end"};goog.fx.Dragger.prototype.target;goog.fx.Dragger.prototype.handle;goog.fx.Dragger.prototype.limits;goog.fx.Dragger.prototype.screenX=0;goog.fx.Dragger.prototype.screenY=0;goog.fx.Dragger.prototype.startX=0;goog.fx.Dragger.prototype.startY=0;goog.fx.Dragger.prototype.deltaX=0;goog.fx.Dragger.prototype.deltaY=0;goog.fx.Dragger.prototype.pageScroll;goog.fx.Dragger.prototype.enabled_=true;
goog.fx.Dragger.prototype.dragging_=false;goog.fx.Dragger.prototype.hysteresisDistanceSquared_=0;goog.fx.Dragger.prototype.mouseDownTime_=0;goog.fx.Dragger.prototype.document_;goog.fx.Dragger.prototype.eventHandler_;goog.fx.Dragger.prototype.scrollTarget_;goog.fx.Dragger.prototype.ieDragStartCancellingOn_=false;goog.fx.Dragger.prototype.getHandler=function(){return this.eventHandler_};goog.fx.Dragger.prototype.setLimits=function(limits){this.limits=limits||new goog.math.Rect(NaN,NaN,NaN,NaN)};
goog.fx.Dragger.prototype.setHysteresis=function(distance){this.hysteresisDistanceSquared_=Math.pow(distance,2)};goog.fx.Dragger.prototype.getHysteresis=function(){return Math.sqrt(this.hysteresisDistanceSquared_)};goog.fx.Dragger.prototype.setScrollTarget=function(scrollTarget){this.scrollTarget_=scrollTarget};goog.fx.Dragger.prototype.setCancelIeDragStart=function(cancelIeDragStart){this.ieDragStartCancellingOn_=cancelIeDragStart};goog.fx.Dragger.prototype.getEnabled=function(){return this.enabled_};
goog.fx.Dragger.prototype.setEnabled=function(enabled){this.enabled_=enabled};goog.fx.Dragger.prototype.disposeInternal=function(){goog.fx.Dragger.superClass_.disposeInternal.call(this);goog.events.unlisten(this.handle,goog.events.EventType.MOUSEDOWN,this.startDrag,false,this);this.eventHandler_.dispose();delete this.target;delete this.handle;delete this.eventHandler_};
goog.fx.Dragger.prototype.startDrag=function(e){if(this.enabled_&&!this.dragging_&&(e.type!=goog.events.EventType.MOUSEDOWN||e.isButton(goog.events.BrowserEvent.MouseButton.LEFT))){if(this.hysteresisDistanceSquared_==0){this.initializeDrag_(e);if(this.dragging_)e.preventDefault();else return}else e.preventDefault();this.setupDragHandlers();this.screenX=this.startX=e.screenX;this.screenY=this.startY=e.screenY;this.deltaX=this.target.offsetLeft;this.deltaY=this.target.offsetTop;this.pageScroll=goog.dom.getDomHelper(this.document_).getDocumentScroll();
this.mouseDownTime_=goog.now()}};
goog.fx.Dragger.prototype.setupDragHandlers=function(){var doc=this.document_;var docEl=doc.documentElement;var useCapture=!goog.fx.Dragger.HAS_SET_CAPTURE_;this.eventHandler_.listen(doc,goog.events.EventType.MOUSEMOVE,this.mouseMoved_,useCapture);this.eventHandler_.listen(doc,goog.events.EventType.MOUSEUP,this.endDrag,useCapture);if(goog.fx.Dragger.HAS_SET_CAPTURE_){docEl.setCapture(false);this.eventHandler_.listen(docEl,goog.events.EventType.LOSECAPTURE,this.endDrag)}else this.eventHandler_.listen(goog.dom.getWindow(doc),goog.events.EventType.BLUR,
this.endDrag);if(goog.userAgent.IE&&this.ieDragStartCancellingOn_)this.eventHandler_.listen(doc,goog.events.EventType.DRAGSTART,goog.events.Event.preventDefault);if(this.scrollTarget_)this.eventHandler_.listen(this.scrollTarget_,goog.events.EventType.SCROLL,this.onScroll_,useCapture)};goog.fx.Dragger.prototype.initializeDrag_=function(e){var rv=this.dispatchEvent(new goog.fx.DragEvent(goog.fx.Dragger.EventType.START,this,e.clientX,e.clientY,e));if(rv!==false)this.dragging_=true};
goog.fx.Dragger.prototype.endDrag=function(e,opt_dragCanceled){this.eventHandler_.removeAll();if(goog.fx.Dragger.HAS_SET_CAPTURE_)this.document_.releaseCapture();if(this.dragging_){this.dragging_=false;var x=this.limitX(this.deltaX);var y=this.limitY(this.deltaY);this.dispatchEvent(new goog.fx.DragEvent(goog.fx.Dragger.EventType.END,this,e.clientX,e.clientY,e,x,y,opt_dragCanceled))}};goog.fx.Dragger.prototype.endDragCancel=function(e){this.endDrag(e,true)};
goog.fx.Dragger.prototype.mouseMoved_=function(e){if(this.enabled_){var dx=e.screenX-this.screenX;var dy=e.screenY-this.screenY;this.screenX=e.screenX;this.screenY=e.screenY;if(!this.dragging_){var diffX=this.startX-this.screenX;var diffY=this.startY-this.screenY;var distance=diffX*diffX+diffY*diffY;if(distance>this.hysteresisDistanceSquared_){this.initializeDrag_(e);if(!this.dragging_){this.endDrag(e);return}}}var pos=this.calculatePosition_(dx,dy);var x=pos.x;var y=pos.y;if(this.dragging_){var rv=
this.dispatchEvent(new goog.fx.DragEvent(goog.fx.Dragger.EventType.BEFOREDRAG,this,e.clientX,e.clientY,e,x,y));if(rv!==false){this.doDrag(e,x,y,false);e.preventDefault()}}}};
goog.fx.Dragger.prototype.calculatePosition_=function(dx,dy){var pageScroll=goog.dom.getDomHelper(this.document_).getDocumentScroll();dx+=pageScroll.x-this.pageScroll.x;dy+=pageScroll.y-this.pageScroll.y;this.pageScroll=pageScroll;this.deltaX+=dx;this.deltaY+=dy;var x=this.limitX(this.deltaX);var y=this.limitY(this.deltaY);return new goog.math.Coordinate(x,y)};
goog.fx.Dragger.prototype.onScroll_=function(e){var pos=this.calculatePosition_(0,0);e.clientX=this.pageScroll.x-this.screenX;e.clientY=this.pageScroll.x-this.screenY;this.doDrag(e,pos.x,pos.y,true)};goog.fx.Dragger.prototype.doDrag=function(e,x,y,dragFromScroll){this.defaultAction(x,y);this.dispatchEvent(new goog.fx.DragEvent(goog.fx.Dragger.EventType.DRAG,this,e.clientX,e.clientY,e,x,y))};
goog.fx.Dragger.prototype.limitX=function(x){var rect=this.limits;var left=!isNaN(rect.left)?rect.left:null;var width=!isNaN(rect.width)?rect.width:0;var maxX=left!=null?left+width:Infinity;var minX=left!=null?left:-Infinity;return Math.min(maxX,Math.max(minX,x))};
goog.fx.Dragger.prototype.limitY=function(y){var rect=this.limits;var top=!isNaN(rect.top)?rect.top:null;var height=!isNaN(rect.height)?rect.height:0;var maxY=top!=null?top+height:Infinity;var minY=top!=null?top:-Infinity;return Math.min(maxY,Math.max(minY,y))};goog.fx.Dragger.prototype.defaultAction=function(x,y){this.target.style.left=x+"px";this.target.style.top=y+"px"};
goog.fx.DragEvent=function(type,dragobj,clientX,clientY,browserEvent,opt_actX,opt_actY,opt_dragCanceled){goog.events.Event.call(this,type);this.clientX=clientX;this.clientY=clientY;this.browserEvent=browserEvent;this.left=goog.isDef(opt_actX)?opt_actX:dragobj.deltaX;this.top=goog.isDef(opt_actY)?opt_actY:dragobj.deltaY;this.dragger=dragobj;this.dragCanceled=!!opt_dragCanceled};goog.inherits(goog.fx.DragEvent,goog.events.Event);goog.provide("goog.editor.defines");goog.editor.defines.USE_CONTENTEDITABLE_IN_FIREFOX_3=false;goog.provide("goog.userAgent.product");goog.require("goog.userAgent");goog.userAgent.product.ASSUME_FIREFOX=false;goog.userAgent.product.ASSUME_CAMINO=false;goog.userAgent.product.ASSUME_IPHONE=false;goog.userAgent.product.ASSUME_IPAD=false;goog.userAgent.product.ASSUME_ANDROID=false;goog.userAgent.product.ASSUME_CHROME=false;goog.userAgent.product.ASSUME_SAFARI=false;
goog.userAgent.product.PRODUCT_KNOWN_=goog.userAgent.ASSUME_IE||goog.userAgent.ASSUME_OPERA||goog.userAgent.product.ASSUME_FIREFOX||goog.userAgent.product.ASSUME_CAMINO||goog.userAgent.product.ASSUME_IPHONE||goog.userAgent.product.ASSUME_IPAD||goog.userAgent.product.ASSUME_ANDROID||goog.userAgent.product.ASSUME_CHROME||goog.userAgent.product.ASSUME_SAFARI;
goog.userAgent.product.init_=function(){goog.userAgent.product.detectedFirefox_=false;goog.userAgent.product.detectedCamino_=false;goog.userAgent.product.detectedIphone_=false;goog.userAgent.product.detectedIpad_=false;goog.userAgent.product.detectedAndroid_=false;goog.userAgent.product.detectedChrome_=false;goog.userAgent.product.detectedSafari_=false;var ua=goog.userAgent.getUserAgentString();if(!ua)return;if(ua.indexOf("Firefox")!=-1)goog.userAgent.product.detectedFirefox_=true;else if(ua.indexOf("Camino")!=
-1)goog.userAgent.product.detectedCamino_=true;else if(ua.indexOf("iPhone")!=-1||ua.indexOf("iPod")!=-1)goog.userAgent.product.detectedIphone_=true;else if(ua.indexOf("iPad")!=-1)goog.userAgent.product.detectedIpad_=true;else if(ua.indexOf("Android")!=-1)goog.userAgent.product.detectedAndroid_=true;else if(ua.indexOf("Chrome")!=-1)goog.userAgent.product.detectedChrome_=true;else if(ua.indexOf("Safari")!=-1)goog.userAgent.product.detectedSafari_=true};if(!goog.userAgent.product.PRODUCT_KNOWN_)goog.userAgent.product.init_();
goog.userAgent.product.OPERA=goog.userAgent.OPERA;goog.userAgent.product.IE=goog.userAgent.IE;goog.userAgent.product.FIREFOX=goog.userAgent.product.PRODUCT_KNOWN_?goog.userAgent.product.ASSUME_FIREFOX:goog.userAgent.product.detectedFirefox_;goog.userAgent.product.CAMINO=goog.userAgent.product.PRODUCT_KNOWN_?goog.userAgent.product.ASSUME_CAMINO:goog.userAgent.product.detectedCamino_;goog.userAgent.product.IPHONE=goog.userAgent.product.PRODUCT_KNOWN_?goog.userAgent.product.ASSUME_IPHONE:goog.userAgent.product.detectedIphone_;
goog.userAgent.product.IPAD=goog.userAgent.product.PRODUCT_KNOWN_?goog.userAgent.product.ASSUME_IPAD:goog.userAgent.product.detectedIpad_;goog.userAgent.product.ANDROID=goog.userAgent.product.PRODUCT_KNOWN_?goog.userAgent.product.ASSUME_ANDROID:goog.userAgent.product.detectedAndroid_;goog.userAgent.product.CHROME=goog.userAgent.product.PRODUCT_KNOWN_?goog.userAgent.product.ASSUME_CHROME:goog.userAgent.product.detectedChrome_;
goog.userAgent.product.SAFARI=goog.userAgent.product.PRODUCT_KNOWN_?goog.userAgent.product.ASSUME_SAFARI:goog.userAgent.product.detectedSafari_;goog.provide("goog.userAgent.product.isVersion");goog.require("goog.userAgent.product");
goog.userAgent.product.determineVersion_=function(){var version="",re,combine;if(goog.userAgent.product.FIREFOX)re=/Firefox\/([0-9.]+)/;else if(goog.userAgent.product.IE||goog.userAgent.product.OPERA)return goog.userAgent.VERSION;else if(goog.userAgent.product.CHROME)re=/Chrome\/([0-9.]+)/;else if(goog.userAgent.product.SAFARI)re=/Safari\/([0-9.]+)/;else if(goog.userAgent.product.IPHONE||goog.userAgent.product.IPAD){re=/Version\/(\S+).*Mobile\/(\S+)/;combine=true}else if(goog.userAgent.product.ANDROID)re=
/Android\s+([0-9.]+)(?:.*Version\/([0-9.]+))?/;else if(goog.userAgent.product.CAMINO)re=/Camino\/([0-9.]+)/;if(re){var arr=re.exec(goog.userAgent.getUserAgentString());if(arr)version=combine?arr[1]+"."+arr[2]:arr[2]||arr[1];else version=""}return version};goog.userAgent.product.VERSION=goog.userAgent.product.determineVersion_();goog.userAgent.product.isVersion=function(version){return goog.string.compareVersions(goog.userAgent.product.VERSION,version)>=0};goog.provide("goog.editor.BrowserFeature");goog.require("goog.editor.defines");goog.require("goog.userAgent");goog.require("goog.userAgent.product");goog.require("goog.userAgent.product.isVersion");
goog.editor.BrowserFeature={HAS_IE_RANGES:goog.userAgent.IE,HAS_W3C_RANGES:goog.userAgent.GECKO||goog.userAgent.WEBKIT||goog.userAgent.OPERA,HAS_CONTENT_EDITABLE:goog.userAgent.IE||goog.userAgent.WEBKIT||goog.userAgent.OPERA||goog.editor.defines.USE_CONTENTEDITABLE_IN_FIREFOX_3&&goog.userAgent.GECKO&&goog.userAgent.isVersion("1.9"),USE_MUTATION_EVENTS:goog.userAgent.GECKO,HAS_DOM_SUBTREE_MODIFIED_EVENT:goog.userAgent.WEBKIT||goog.editor.defines.USE_CONTENTEDITABLE_IN_FIREFOX_3&&goog.userAgent.GECKO&&
goog.userAgent.isVersion("1.9"),HAS_DOCUMENT_INDEPENDENT_NODES:goog.userAgent.GECKO,PUTS_CURSOR_BEFORE_FIRST_BLOCK_ELEMENT_ON_FOCUS:goog.userAgent.GECKO,CLEARS_SELECTION_WHEN_FOCUS_LEAVES:goog.userAgent.IE||goog.userAgent.WEBKIT||goog.userAgent.OPERA,HAS_UNSELECTABLE_STYLE:goog.userAgent.GECKO||goog.userAgent.WEBKIT,FORMAT_BLOCK_WORKS_FOR_BLOCKQUOTES:goog.userAgent.GECKO||goog.userAgent.WEBKIT||goog.userAgent.OPERA,CREATES_MULTIPLE_BLOCKQUOTES:goog.userAgent.WEBKIT||goog.userAgent.OPERA,WRAPS_BLOCKQUOTE_IN_DIVS:goog.userAgent.OPERA,
PREFERS_READY_STATE_CHANGE_EVENT:goog.userAgent.IE,TAB_FIRES_KEYPRESS:!goog.userAgent.IE,NEEDS_99_WIDTH_IN_STANDARDS_MODE:goog.userAgent.IE,USE_DOCUMENT_FOR_KEY_EVENTS:goog.userAgent.GECKO&&!goog.editor.defines.USE_CONTENTEDITABLE_IN_FIREFOX_3,SHOWS_CUSTOM_ATTRS_IN_INNER_HTML:goog.userAgent.IE,COLLAPSES_EMPTY_NODES:goog.userAgent.GECKO||goog.userAgent.WEBKIT||goog.userAgent.OPERA,CONVERT_TO_B_AND_I_TAGS:goog.userAgent.GECKO||goog.userAgent.OPERA,TABS_THROUGH_IMAGES:goog.userAgent.IE,UNESCAPES_URLS_WITHOUT_ASKING:goog.userAgent.IE&&
!goog.userAgent.isVersion("7.0"),HAS_STYLE_WITH_CSS:goog.userAgent.GECKO&&goog.userAgent.isVersion("1.8")||goog.userAgent.WEBKIT||goog.userAgent.OPERA,FOLLOWS_EDITABLE_LINKS:goog.userAgent.WEBKIT,HAS_ACTIVE_ELEMENT:goog.userAgent.IE||goog.userAgent.OPERA||goog.userAgent.GECKO&&goog.userAgent.isVersion("1.9"),HAS_SET_CAPTURE:goog.userAgent.IE,EATS_EMPTY_BACKGROUND_COLOR:goog.userAgent.GECKO||goog.userAgent.WEBKIT,SUPPORTS_FOCUSIN:goog.userAgent.IE||goog.userAgent.OPERA,SELECTS_IMAGES_ON_CLICK:goog.userAgent.IE||
goog.userAgent.OPERA,MOVES_STYLE_TO_HEAD:goog.userAgent.WEBKIT,COLLAPSES_SELECTION_ONMOUSEDOWN:goog.userAgent.OPERA,CARET_INSIDE_SELECTION:goog.userAgent.OPERA,FOCUSES_EDITABLE_BODY_ON_HTML_CLICK:goog.userAgent.IE||goog.userAgent.GECKO||goog.userAgent.WEBKIT,USES_KEYDOWN:goog.userAgent.IE||goog.userAgent.WEBKIT&&goog.userAgent.isVersion("525"),ADDS_NBSPS_IN_REMOVE_FORMAT:goog.userAgent.WEBKIT&&!goog.userAgent.isVersion("531"),GETS_STUCK_IN_LINKS:goog.userAgent.WEBKIT&&!goog.userAgent.isVersion("528"),
NORMALIZE_CORRUPTS_EMPTY_TEXT_NODES:goog.userAgent.GECKO&&goog.userAgent.isVersion("1.9")||goog.userAgent.IE||goog.userAgent.OPERA||goog.userAgent.WEBKIT&&goog.userAgent.isVersion("531"),NORMALIZE_CORRUPTS_ALL_TEXT_NODES:goog.userAgent.IE,NESTS_SUBSCRIPT_SUPERSCRIPT:goog.userAgent.IE||goog.userAgent.GECKO||goog.userAgent.OPERA,CAN_SELECT_EMPTY_ELEMENT:!goog.userAgent.IE&&!goog.userAgent.WEBKIT,FORGETS_FORMATTING_WHEN_LISTIFYING:goog.userAgent.GECKO||goog.userAgent.WEBKIT&&!goog.userAgent.isVersion("526"),
LEAVES_P_WHEN_REMOVING_LISTS:goog.userAgent.IE||goog.userAgent.OPERA,CAN_LISTIFY_BR:!goog.userAgent.IE&&!goog.userAgent.OPERA,DOESNT_OVERRIDE_FONT_SIZE_IN_STYLE_ATTR:!goog.userAgent.WEBKIT,SUPPORTS_HTML5_FILE_DRAGGING:goog.userAgent.product.CHROME&&goog.userAgent.product.isVersion("4")};goog.provide("goog.Delay");goog.provide("goog.async.Delay");goog.require("goog.Disposable");goog.require("goog.Timer");goog.async.Delay=function(listener,opt_interval,opt_handler){this.listener_=listener;this.interval_=opt_interval||0;this.handler_=opt_handler;this.callback_=goog.bind(this.doAction_,this)};goog.inherits(goog.async.Delay,goog.Disposable);goog.Delay=goog.async.Delay;goog.async.Delay.prototype.id_=0;
goog.async.Delay.prototype.disposeInternal=function(){goog.async.Delay.superClass_.disposeInternal.call(this);this.stop();delete this.listener_;delete this.handler_};goog.async.Delay.prototype.start=function(opt_interval){this.stop();this.id_=goog.Timer.callOnce(this.callback_,goog.isDef(opt_interval)?opt_interval:this.interval_)};goog.async.Delay.prototype.stop=function(){if(this.isActive())goog.Timer.clear(this.id_);this.id_=0};goog.async.Delay.prototype.fire=function(){this.stop();this.doAction_()};
goog.async.Delay.prototype.fireIfActive=function(){if(this.isActive())this.fire()};goog.async.Delay.prototype.isActive=function(){return this.id_!=0};goog.async.Delay.prototype.doAction_=function(){this.id_=0;if(this.listener_)this.listener_.call(this.handler_)};goog.provide("goog.functions");goog.functions.constant=function(retValue){return function(){return retValue}};goog.functions.FALSE=goog.functions.constant(false);goog.functions.TRUE=goog.functions.constant(true);goog.functions.identity=function(opt_returnValue,var_args){return opt_returnValue};goog.functions.error=function(message){return function(){throw Error(message);}};goog.functions.lock=function(f){return function(){return f.call(this)}};
goog.functions.compose=function(var_args){var functions=arguments;var length=functions.length;return function(){var result;if(length)result=functions[length-1].apply(this,arguments);for(var i=length-2;i>=0;i--)result=functions[i].call(this,result);return result}};goog.functions.sequence=function(var_args){var functions=arguments;var length=functions.length;return function(){var result;for(var i=0;i<length;i++)result=functions[i].apply(this,arguments);return result}};
goog.functions.and=function(var_args){var functions=arguments;var length=functions.length;return function(){for(var i=0;i<length;i++)if(!functions[i].apply(this,arguments))return false;return true}};goog.functions.or=function(var_args){var functions=arguments;var length=functions.length;return function(){for(var i=0;i<length;i++)if(functions[i].apply(this,arguments))return true;return false}};
goog.functions.create=function(constructor,var_args){var temp=function(){};temp.prototype=constructor.prototype;var obj=new temp;constructor.apply(obj,Array.prototype.slice.call(arguments,1));return obj};goog.provide("kemia.controller.Plugin");goog.require("goog.events.EventTarget");goog.require("goog.functions");goog.require("goog.debug.Logger");goog.require("goog.object");goog.require("goog.reflect");kemia.controller.Plugin=function(){goog.events.EventTarget.call(this);this.enabled_=this.activeOnUneditableEditor()};goog.inherits(kemia.controller.Plugin,goog.events.EventTarget);kemia.controller.Plugin.prototype.activeOnUneditableEditor=goog.functions.FALSE;
kemia.controller.Plugin.prototype.registerEditorObject=function(editorObject){this.editorObject=editorObject};kemia.controller.Plugin.prototype.enable=function(editorObject){if(this.editorObject==editorObject)this.enabled_=true;else this.logger.severe("Trying to enable an unregistered field with "+"this plugin.")};
kemia.controller.Plugin.prototype.disable=function(editorObject){if(this.editorObject==editorObject)this.enabled_=false;else this.logger.severe("Trying to disable an unregistered field "+"with this plugin.")};kemia.controller.Plugin.prototype.logger=goog.debug.Logger.getLogger("kemia.controller.Plugin");kemia.controller.Plugin.prototype.isEnabled=function(editorObject){return this.editorObject==editorObject?this.enabled_:false};
kemia.controller.Plugin.prototype.disposeInternal=function(){if(this.editorObject)this.unregisterEditorObject(this.editorObject);kemia.controller.Plugin.superClass_.disposeInternal.call(this)};kemia.controller.Plugin.prototype.unregisterEditorObject=function(){if(this.editorObject){this.disable(this.editorObject);this.editorObject=null}};kemia.controller.Plugin.prototype.autoDispose_=true;kemia.controller.Plugin.prototype.setAutoDispose=function(autoDispose){this.autoDispose_=autoDispose};
kemia.controller.Plugin.prototype.isAutoDispose=function(){return this.autoDispose_};kemia.controller.Plugin.Op={KEYDOWN:1,KEYPRESS:2,KEYUP:3,SELECTION:4,SHORTCUT:5,EXEC_COMMAND:6,QUERY_COMMAND:7,MOUSEDOWN:8,MOUSEUP:9,MOUSEOVER:10,MOUSEOUT:11,MOUSEMOVE:12,ATOM_MOUSEOVER:13,ATOM_MOUSEOUT:14,ATOM_MOUSEDOWN:15,BOND_MOUSEOVER:16,BOND_MOUSEOUT:17,BOND_MOUSEDOWN:18,ARROW_MOUSEOVER:19,ARROW_MOUSEOUT:20,ARROW_MOUSEDOWN:21,PLUS_MOUSEOVER:22,PLUS_MOUSEOUT:23,PLUS_MOUSEDOWN:24,PASTE:25,DBLCLICK:26};
kemia.controller.Plugin.prototype.activeOnUneditableEditors=goog.functions.FALSE;
kemia.controller.Plugin.OPCODE=goog.object.transpose(goog.reflect.object(kemia.controller.Plugin,{handleKeyDown:kemia.controller.Plugin.Op.KEYDOWN,handleKeyPress:kemia.controller.Plugin.Op.KEYPRESS,handleKeyUp:kemia.controller.Plugin.Op.KEYUP,handleSelectionChange:kemia.controller.Plugin.Op.SELECTION,handleKeyboardShortcut:kemia.controller.Plugin.Op.SHORTCUT,execCommand:kemia.controller.Plugin.Op.EXEC_COMMAND,queryCommandValue:kemia.controller.Plugin.Op.QUERY_COMMAND,handleMouseDown:kemia.controller.Plugin.Op.MOUSEDOWN,
handleMouseUp:kemia.controller.Plugin.Op.MOUSEUP,handleMouseOver:kemia.controller.Plugin.Op.MOUSEOVER,handleMouseOut:kemia.controller.Plugin.Op.MOUSEOUT,handleMouseMove:kemia.controller.Plugin.Op.MOUSEMOVE,handleAtomMouseOver:kemia.controller.Plugin.Op.ATOM_MOUSEOVER,handleAtomMouseOut:kemia.controller.Plugin.Op.ATOM_MOUSEOUT,handleAtomMouseDown:kemia.controller.Plugin.Op.ATOM_MOUSEDOWN,handleBondMouseOver:kemia.controller.Plugin.Op.BOND_MOUSEOVER,handleBondMouseOut:kemia.controller.Plugin.Op.BOND_MOUSEOUT,
handleBondMouseDown:kemia.controller.Plugin.Op.BOND_MOUSEDOWN,handleArrowMouseOver:kemia.controller.Plugin.Op.ARROW_MOUSEOVER,handleArrowMouseOut:kemia.controller.Plugin.Op.ARROW_MOUSEOUT,handleArrowMouseDown:kemia.controller.Plugin.Op.ARROW_MOUSEDOWN,handlePlusMouseOver:kemia.controller.Plugin.Op.PLUS_MOUSEOVER,handlePlusMouseOut:kemia.controller.Plugin.Op.PLUS_MOUSEOUT,handlePlusMouseDown:kemia.controller.Plugin.Op.PLUS_MOUSEDOWN,handlePaste:kemia.controller.Plugin.Op.PASTE,handleDoubleClick:kemia.controller.Plugin.Op.DBLCLICK}));
kemia.controller.Plugin.prototype.execCommand=function(command,var_args){var silent=this.isSilentCommand(command);if(!silent)this.editorObject.dispatchBeforeChange();try{var result=this.execCommandInternal.apply(this,arguments)}finally{if(!silent)this.editorObject.dispatchChange()}return result};kemia.controller.Plugin.prototype.isSilentCommand=goog.functions.FALSE;kemia.controller.Plugin.prototype.isSupportedCommand=function(command){return false};goog.provide("kemia.model.NeighborList");goog.require("goog.math.Vec2");goog.require("goog.array");goog.require("goog.math.Line");
kemia.model.NeighborList=function(objects,opt_cellSize,opt_tolerance){this.cells=[];this.cellSize=opt_cellSize?opt_cellSize:2;this.tolerance=opt_tolerance?opt_tolerance:0.3;this.xMin=1E5;this.yMin=1E5;this.xMax=-1E5;this.yMax=-1E5;for(var i=0,li=objects.length;i<li;i++){var obj=objects[i];if(obj instanceof kemia.model.Molecule)for(var j=0,lj=obj.countAtoms();j<lj;j++){var atom=obj.atoms[j];if(atom.coord.x<this.xMin)this.xMin=atom.coord.x;if(atom.coord.x>this.xMax)this.xMax=atom.coord.x;if(atom.coord.y<
this.yMin)this.yMin=atom.coord.y;if(atom.coord.y>this.yMax)this.yMax=atom.coord.y}else if(obj instanceof goog.math.Coordinate){var coord=obj;if(coord.x<this.xMin)this.xMin=coord.x;if(coord.x>this.xMax)this.xMax=coord.x;if(coord.y<this.yMin)this.yMin=coord.y;if(coord.y>this.yMax)this.yMax=coord.y}}this.xMin-=1;this.yMin-=1;this.xMax+=1;this.yMax+=1;this.width=this.xMax-this.xMin;this.height=this.yMax-this.yMin;this.xDim=Math.ceil(this.width/this.cellSize);this.yDim=Math.ceil(this.height/this.cellSize);
for(var i=0,li=this.xDim*this.yDim;i<li;i++)this.cells.push([]);goog.array.forEach(objects,function(obj){if(obj instanceof kemia.model.Molecule){var molecule=obj;goog.array.forEach(molecule.atoms,function(atom){var x=Math.floor((atom.coord.x-this.xMin)/this.cellSize);var y=Math.floor((atom.coord.y-this.yMin)/this.cellSize);this.cells[y*this.xDim+x].push(atom)},this);goog.array.forEach(molecule.bonds,function(bond){var midPoint=goog.math.Vec2.fromCoordinate(goog.math.Coordinate.sum(bond.source.coord,
bond.target.coord));midPoint.scale(0.5);bond.midPoint=midPoint;var x=Math.floor((midPoint.x-this.xMin)/this.cellSize);var y=Math.floor((midPoint.y-this.yMin)/this.cellSize);this.cells[y*this.xDim+x].push(bond)},this)}else if(obj instanceof goog.math.Coordinate){var coord=obj;var x=Math.floor((coord.x-this.xMin)/this.cellSize);var y=Math.floor((coord.y-this.yMin)/this.cellSize);this.cells[y*this.xDim+x].push(coord)}},this)};
kemia.model.NeighborList.prototype.cellsAroundCoord=function(coord){var cells=[];var x=Math.floor((coord.x-this.xMin)/this.cellSize);var y=Math.floor((coord.y-this.yMin)/this.cellSize);for(var i=x-1,li=x+2;i<li;i++){if(i<0||i>=this.xDim)continue;for(var j=y-1,lj=y+2;j<lj;j++){if(j<0||j>=this.yDim)continue;cells.push(j*this.xDim+i)}}return cells};kemia.model.NeighborList.prototype.triangleSign=function(a,b,c){return(a.x-c.x)*(b.y-c.y)-(a.y-c.y)*(b.x-c.x)};
kemia.model.NeighborList.prototype.bondDistance=function(bond,coord){var line=new goog.math.Line(bond.source.coord.x,bond.source.coord.y,bond.target.coord.x,bond.target.coord.y);return goog.math.Coordinate.distance(line.getClosestSegmentPoint(coord.x,coord.y),coord)};kemia.model.NeighborList.prototype.getNearest=function(coord){var nearestList=this.getNearestList(coord);if(nearestList.length>0)return nearestList[0]};
kemia.model.NeighborList.prototype.getNearestList=function(coord){var nearest=[];var cells=this.cellsAroundCoord(coord);var rMin=this.tolerance;for(i=0,li=cells.length;i<li;i++){var cell=this.cells[cells[i]];for(j=0,lj=cell.length;j<lj;j++){var obj=cell[j];if(obj instanceof kemia.model.Atom){var r=goog.math.Coordinate.distance(obj.coord,coord);if(r<this.tolerance)nearest.push({obj:obj,distance:r});else if(r<3*this.tolerance)nearest.push({obj:obj.molecule,distance:r*2})}else if(obj instanceof kemia.model.Bond){var r=
this.bondDistance(obj,coord);if(r<this.tolerance)nearest.push({obj:obj,distance:r+this.tolerance})}else if(obj instanceof goog.math.Coordinate){var r=goog.math.Coordinate.distance(obj,coord);if(r<this.tolerance)nearest.push({obj:obj,distance:r})}}}nearest.sort(function(a,b){return a.distance-b.distance});return goog.array.map(nearest,function(n){return n.obj})};goog.provide("kemia.controller.ReactionEditor");goog.provide("kemia.controller.ReactionEditor.EventType");goog.require("kemia.controller.ReactionController");goog.require("kemia.view.ReactionRenderer");goog.require("kemia.view.MoleculeRenderer");goog.require("goog.graphics");goog.require("goog.events");goog.require("goog.fx.Dragger");goog.require("goog.fx.Dragger.EventType");goog.require("goog.editor.BrowserFeature");goog.require("goog.async.Delay");goog.require("kemia.controller.Plugin");goog.require("kemia.model.NeighborList");
kemia.controller.ReactionEditor=function(element,opt_config){goog.events.EventTarget.call(this);this.originalElement=element;this.id=element.id;this.editableDomHelper=goog.dom.getDomHelper(element);this.models=[];this.plugins_={};this.indexedPlugins_={};for(var op in kemia.controller.Plugin.OPCODE)this.indexedPlugins_[op]=[];this.config=new goog.structs.Map(kemia.controller.ReactionEditor.defaultConfig);if(opt_config)this.config.addAll(opt_config);this.graphics=goog.graphics.createGraphics(element.clientWidth,
element.clientHeight);this.graphics.render(this.originalElement);this.reactionController=new kemia.controller.ReactionController(this);this.reactionRenderer=new kemia.view.ReactionRenderer(this.reactionController,this.graphics,this.config);this.isModified_=false;this.isEverModified_=false;this.eventRegister=new goog.events.EventHandler(this);this.wrappers_=[];this.handleEditorLoad();this.loadState_=kemia.controller.ReactionEditor.LoadState_.EDITABLE;this.isModified_=false;this.isEverModified_=false;
this.selected=[];this.neighborList=[]};goog.inherits(kemia.controller.ReactionEditor,goog.events.EventTarget);kemia.controller.ReactionEditor.setActiveEditorId=function(editorId){kemia.controller.ReactionEditor.activeEditorId_=editorId};kemia.controller.ReactionEditor.prototype.getEditableDomHelper=function(){return this.editableDomHelper};kemia.controller.ReactionEditor.getActiveEditorId=function(){return kemia.controller.ReactionEditor.activeEditorId_};
kemia.controller.ReactionEditor.prototype.clear=function(){this.graphics.clear();this.models=[];var fill=new goog.graphics.SolidFill(this.config.get("background").color);this.graphics.drawRect(0,0,this.graphics.getSize().width,this.graphics.getSize().height,null,fill)};kemia.controller.ReactionEditor.prototype.getScaleFactor=function(){return this.reactionRenderer.scale_factor};kemia.controller.ReactionEditor.prototype.setScaleFactor=function(scale){this.reactionRenderer.scale_factor=scale};
kemia.controller.ReactionEditor.prototype.setModels=function(models){this.clear();this.models=models;var objects=goog.array.flatten(goog.array.map(models,function(model){if(model instanceof kemia.model.Reaction){if(model.pluses.length==0){model.generatePlusCoords(model.reactants);model.generatePlusCoords(model.products)}if(model.arrows.length==0&&model.reactants.length>0&&model.products.length>0)model.generateArrowCoords(model.reactants,model.products);return goog.array.concat(model.reactants,model.products,
model.pluses,model.arrows)}else return[model]}));if(objects.length>0)this.neighborList=new kemia.model.NeighborList(objects,1,0.5);this.render()};kemia.controller.ReactionEditor.prototype.render=function(){goog.array.forEach(this.models,function(model){if(model instanceof kemia.model.Reaction)this.reactionRenderer.render(model);if(model instanceof kemia.model.Molecule)this.reactionRenderer.moleculeRenderer.render(model)},this)};kemia.controller.ReactionEditor.prototype.getModels=function(){return this.models};
kemia.controller.ReactionEditor.prototype.dispatchBeforeChange=function(){this.dispatchEvent(kemia.controller.ReactionEditor.EventType.BEFORECHANGE)};
kemia.controller.ReactionEditor.prototype.invokeShortCircuitingOp_=function(op,var_args){var plugins=this.indexedPlugins_[op];var argList=goog.array.slice(arguments,1);for(var i=0;i<plugins.length;++i){var plugin=plugins[i];if((plugin.isEnabled(this)||kemia.controller.Plugin.IRREPRESSIBLE_OPS[op])&&plugin[kemia.controller.Plugin.OPCODE[op]].apply(plugin,argList))return true}return false};kemia.controller.ReactionEditor.prototype.handleChange=function(){this.isModified_=true;this.isEverModified_=true};
kemia.controller.ReactionEditor.prototype.handleKeyDown_=function(e){};kemia.controller.ReactionEditor.prototype.handleKeyPress_=function(e){this.gotGeneratingKey_=true;this.dispatchBeforeChange();this.handleKeyboardShortcut_(e)};kemia.controller.ReactionEditor.prototype.handleKeyUp_=function(e){this.invokeShortCircuitingOp_(kemia.controller.Plugin.Op.KEYUP,e);this.selectionChangeTimer_.start()};
kemia.controller.ReactionEditor.prototype.findTarget=function(e){var trans=this.reactionRenderer.moleculeRenderer.transform.createInverse();var pos=kemia.controller.ReactionEditor.getMouseCoords(e);var target=trans.transformCoords([pos])[0];return this.neighborList.getNearest({x:target.x,y:target.y})};
kemia.controller.ReactionEditor.getMouseCoords=function(e){var elem=e.currentTarget;var posx=e.clientX+document.body.scrollLeft+document.documentElement.scrollLeft;var posy=e.clientY+document.body.scrollTop+document.documentElement.scrollTop;posx-=elem.offsetLeft;posy-=elem.offsetTop;while(elem=elem.offsetParent){posx-=elem.offsetLeft;posy-=elem.offsetTop}return new goog.math.Coordinate(posx,posy)};
kemia.controller.ReactionEditor.prototype.findTargetList=function(e){var trans=this.reactionRenderer.moleculeRenderer.transform.createInverse();var pos=kemia.controller.ReactionEditor.getMouseCoords(e);var target=trans.transformCoords([pos])[0];return this.neighborList.getNearestList({x:target.x,y:target.y})};kemia.controller.ReactionEditor.prototype.handleMouseOver_=function(e){this.invokeShortCircuitingOp_(kemia.controller.Plugin.Op.MOUSEOVER,e)};
kemia.controller.ReactionEditor.prototype.handleMouseOut_=function(e){this.invokeShortCircuitingOp_(kemia.controller.Plugin.Op.MOUSEOUT,e)};kemia.controller.ReactionEditor.prototype.handleMouseMove_=function(e){this.invokeShortCircuitingOp_(kemia.controller.Plugin.Op.MOUSEMOVE,e)};kemia.controller.ReactionEditor.prototype.handleMouseUp_=function(e){this.invokeShortCircuitingOp_(kemia.controller.Plugin.Op.MOUSEUP,e)};
kemia.controller.ReactionEditor.prototype.handleMouseDown_=function(e){this.invokeShortCircuitingOp_(kemia.controller.Plugin.Op.MOUSEDOWN,e)};kemia.controller.ReactionEditor.prototype.handleMouseUp_=function(e){this.invokeShortCircuitingOp_(kemia.controller.Plugin.Op.MOUSEUP,e)};kemia.controller.ReactionEditor.prototype.handleDblclick_=function(e){this.invokeShortCircuitingOp_(kemia.controller.Plugin.Op.DBLCLICK,e)};
kemia.controller.ReactionEditor.prototype.handlePaste_=function(e){this.invokeShortCircuitingOp_(kemia.controller.Plugin.Op.PASTE,e)};
kemia.controller.ReactionEditor.prototype.queryCommandValueInternal_=function(command,isEditable){var plugins=this.indexedPlugins_[kemia.controller.Plugin.Op.QUERY_COMMAND];for(var i=0;i<plugins.length;++i){var plugin=plugins[i];if(plugin.isEnabled(this)&&plugin.isSupportedCommand(command)&&(isEditable||plugin.activeOnUneditableEditors()))return plugin.queryCommandValue(command)}return isEditable?null:false};
kemia.controller.ReactionEditor.prototype.queryCommandValue=function(commands){var isEditable=this.isLoaded();if(goog.isString(commands))return this.queryCommandValueInternal_(commands,isEditable);else{var state={};for(var i=0;i<commands.length;i++)state[commands[i]]=this.queryCommandValueInternal_(commands[i],isEditable);return state}};kemia.controller.ReactionEditor.prototype.dispatchChange=function(){this.handleChange()};
kemia.controller.ReactionEditor.prototype.dispatchCommandValueChange=function(opt_commands){if(opt_commands)this.dispatchEvent({type:kemia.controller.ReactionEditor.EventType.COMMAND_VALUE_CHANGE,commands:opt_commands});else this.dispatchEvent(kemia.controller.ReactionEditor.EventType.COMMAND_VALUE_CHANGE)};
kemia.controller.ReactionEditor.prototype.execCommand=function(command,var_args){var args=arguments;var result;var plugins=this.indexedPlugins_[kemia.controller.Plugin.Op.EXEC_COMMAND];for(var i=0;i<plugins.length;++i){var plugin=plugins[i];if(plugin.isEnabled(this)&&plugin.isSupportedCommand(command)){result=plugin.execCommand.apply(plugin,args);break}}return result};
kemia.controller.ReactionEditor.prototype.registerPlugin=function(plugin){var classId=plugin.getTrogClassId();if(this.plugins_[classId])this.logger.severe("Cannot register the same class of plugin twice ["+classId+"]");this.plugins_[classId]=plugin;for(var op in kemia.controller.Plugin.OPCODE){var opcode=kemia.controller.Plugin.OPCODE[op];if(plugin[opcode])this.indexedPlugins_[op].push(plugin)}plugin.registerEditorObject(this);if(this.isLoaded())plugin.enable(this)};
kemia.controller.ReactionEditor.prototype.unregisterPlugin=function(plugin){var classId=plugin.getTrogClassId();if(!this.plugins_[classId])this.logger.severe("Cannot unregister a plugin that isn't registered.");delete this.plugins_[classId];for(var op in kemia.controller.Plugin.OPCODE){var opcode=kemia.controller.Plugin.OPCODE[op];if(plugin[opcode])goog.array.remove(this.indexedPlugins_[op],plugin)}plugin.unregisterEditorObject(this)};
kemia.controller.ReactionEditor.prototype.isLoaded=function(){return this.loadState_==kemia.controller.ReactionEditor.LoadState_.EDITABLE};kemia.controller.ReactionEditor.LoadState_={UNEDITABLE:0,LOADING:1,EDITABLE:2};kemia.controller.ReactionEditor.prototype.logger=goog.debug.Logger.getLogger("kemia.controller.ReactionEditor");kemia.controller.ReactionEditor.EventType={COMMAND_VALUE_CHANGE:"cvc",LOAD:"load",UNLOAD:"unload",BEFORECHANGE:"beforechange",CHANGE:"change"};
kemia.controller.ReactionEditor.prototype.disposeInternal=function(){if(this.isLoading()||this.isLoaded())this.logger.warning("Disposing an editor that is in use.");if(this.getOriginalElement())this.execCommand(kemia.controller.Command.CLEAR);this.tearDownEditorObject_();this.clearListeners_();this.originalDomHelper=null;if(this.eventRegister){this.eventRegister.dispose();this.eventRegister=null}this.removeAllWrappers();if(kemia.controller.ReactionEditor.getActiveEditorId()==this.id)kemia.controller.ReactionEditor.setActiveEditorId(null);
for(var classId in this.plugins_){var plugin=this.plugins_[classId];if(plugin.isAutoDispose())plugin.dispose()}delete this.plugins_;kemia.controller.ReactionEditor.superClass_.disposeInternal.call(this)};kemia.controller.ReactionEditor.prototype.getPluginByClassId=function(classId){return this.plugins_[classId]};
kemia.controller.ReactionEditor.prototype.tearDownEditorObject_=function(){for(var classId in this.plugins_){var plugin=this.plugins_[classId];if(!plugin.activeOnUneditableEditors())plugin.disable(this)}this.loadState_=kemia.controller.ReactionEditor.LoadState_.UNEDITABLE};kemia.controller.ReactionEditor.prototype.isLoaded=function(){return this.loadState_==kemia.controller.ReactionEditor.LoadState_.EDITABLE};kemia.controller.ReactionEditor.prototype.isLoading=function(){return this.loadState_==kemia.controller.ReactionEditor.LoadState_.LOADING};
kemia.controller.ReactionEditor.prototype.getOriginalElement=function(){return this.originalElement};kemia.controller.ReactionEditor.prototype.clearListeners_=function(){if(this.eventRegister)this.eventRegister.removeAll()};kemia.controller.ReactionEditor.prototype.removeAllWrappers=function(){var wrapper;while(wrapper=this.wrappers_.pop())wrapper.dispose()};
kemia.controller.ReactionEditor.prototype.handleEditorLoad=function(){if(kemia.controller.ReactionEditor.getActiveEditorId()!=this.id);this.setupChangeListeners_();this.dispatchLoadEvent_();for(var classId in this.plugins_)this.plugins_[classId].enable(this)};kemia.controller.ReactionEditor.prototype.dispatchLoadEvent_=function(){this.installStyles();this.dispatchEvent(kemia.controller.ReactionEditor.EventType.LOAD)};
kemia.controller.ReactionEditor.prototype.addListener=function(type,listener,opt_capture,opt_handler){var elem=this.getOriginalElement();this.eventRegister.listen(elem,type,listener,opt_capture,opt_handler)};
kemia.controller.ReactionEditor.prototype.setupChangeListeners_=function(){this.addListener(goog.events.EventType.MOUSEDOWN,this.handleMouseDown_);this.addListener(goog.events.EventType.MOUSEMOVE,this.handleMouseMove_);this.addListener(goog.events.EventType.MOUSEUP,this.handleMouseUp_);this.addListener(goog.events.EventType.DBLCLICK,this.handleDblclick_);this.addListener("paste",this.handlePaste_)};
kemia.controller.ReactionEditor.prototype.installStyles=function(){if(this.cssStyles&&this.shouldLoadAsynchronously())goog.style.installStyles(this.cssStyles,this.getElement())};kemia.controller.ReactionEditor.defaultConfig={background:{color:"#F0FFF0"},margin:{left:1,right:1,top:1,bottom:1}};goog.provide("goog.string.StringBuffer");goog.require("goog.userAgent.jscript");goog.string.StringBuffer=function(opt_a1,var_args){this.buffer_=goog.userAgent.jscript.HAS_JSCRIPT?[]:"";if(opt_a1!=null)this.append.apply(this,arguments)};goog.string.StringBuffer.prototype.set=function(s){this.clear();this.append(s)};
if(goog.userAgent.jscript.HAS_JSCRIPT){goog.string.StringBuffer.prototype.bufferLength_=0;goog.string.StringBuffer.prototype.append=function(a1,opt_a2,var_args){if(opt_a2==null)this.buffer_[this.bufferLength_++]=a1;else{this.buffer_.push.apply(this.buffer_,arguments);this.bufferLength_=this.buffer_.length}return this}}else goog.string.StringBuffer.prototype.append=function(a1,opt_a2,var_args){this.buffer_+=a1;if(opt_a2!=null)for(var i=1;i<arguments.length;i++)this.buffer_+=arguments[i];return this};
goog.string.StringBuffer.prototype.clear=function(){if(goog.userAgent.jscript.HAS_JSCRIPT){this.buffer_.length=0;this.bufferLength_=0}else this.buffer_=""};goog.string.StringBuffer.prototype.getLength=function(){return this.toString().length};goog.string.StringBuffer.prototype.toString=function(){if(goog.userAgent.jscript.HAS_JSCRIPT){var str=this.buffer_.join("");this.clear();if(str)this.append(str);return str}else return this.buffer_};goog.provide("goog.ui.ControlContent");goog.ui.ControlContent=goog.typedef;goog.provide("goog.dom.a11y");goog.provide("goog.dom.a11y.Role");goog.provide("goog.dom.a11y.State");goog.require("goog.dom");goog.require("goog.userAgent");goog.dom.a11y.State={ACTIVEDESCENDANT:"activedescendant",AUTOCOMPLETE:"autocomplete",CHECKED:"checked",DISABLED:"disabled",EXPANDED:"expanded",HASPOPUP:"haspopup",LABELLEDBY:"labelledby",LEVEL:"level",PRESSED:"pressed",SELECTED:"selected",VALUEMAX:"valuemax",VALUEMIN:"valuemin",VALUENOW:"valuenow",VALUETEXT:"valuetext"};
goog.dom.a11y.Role={BUTTON:"button",CHECKBOX:"checkbox",COMBOBOX:"combobox",DIALOG:"dialog",LINK:"link",LISTBOX:"listbox",MAIN:"main",MENU:"menu",MENUBAR:"menubar",MENU_ITEM:"menuitem",MENU_ITEM_CHECKBOX:"menuitemcheckbox",MENU_ITEM_RADIO:"menuitemradio",NAVIGATION:"navigation",OPTION:"option",GROUP:"group",SLIDER:"slider",TAB:"tab",TAB_LIST:"tablist",TAB_PANEL:"tabpanel",TOOLBAR:"toolbar"};goog.dom.a11y.noBrowserCheck_;
goog.dom.a11y.setRole=function(element,roleName){if(goog.userAgent.GECKO||goog.dom.a11y.noBrowserCheck_){element.setAttribute("role",roleName);element.roleName=roleName}};goog.dom.a11y.getRole=function(element){return element.roleName||""};goog.dom.a11y.setState=function(element,state,value){if(goog.userAgent.GECKO||goog.dom.a11y.noBrowserCheck_)element.setAttribute("aria-"+state,value)};goog.dom.a11y.getState=function(element,stateName){return element.getAttribute("aria-"+stateName)||""};
goog.dom.a11y.getNoBrowserCheck=function(){return!!goog.dom.a11y.noBrowserCheck_};goog.dom.a11y.setNoBrowserCheck=function(noBrowserCheck){goog.dom.a11y.noBrowserCheck_=noBrowserCheck};goog.dom.a11y.getActiveDescendant=function(element){var id=goog.dom.a11y.getState(element,goog.dom.a11y.State.ACTIVEDESCENDANT);return goog.dom.getOwnerDocument(element).getElementById(id)};
goog.dom.a11y.setActiveDescendant=function(element,activeElement){goog.dom.a11y.setState(element,goog.dom.a11y.State.ACTIVEDESCENDANT,activeElement?activeElement.id:"")};goog.provide("goog.events.KeyCodes");goog.require("goog.userAgent");
goog.events.KeyCodes={MAC_ENTER:3,BACKSPACE:8,TAB:9,NUM_CENTER:12,ENTER:13,SHIFT:16,CTRL:17,ALT:18,PAUSE:19,CAPS_LOCK:20,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,PRINT_SCREEN:44,INSERT:45,DELETE:46,ZERO:48,ONE:49,TWO:50,THREE:51,FOUR:52,FIVE:53,SIX:54,SEVEN:55,EIGHT:56,NINE:57,QUESTION_MARK:63,A:65,B:66,C:67,D:68,E:69,F:70,G:71,H:72,I:73,J:74,K:75,L:76,M:77,N:78,O:79,P:80,Q:81,R:82,S:83,T:84,U:85,V:86,W:87,X:88,Y:89,Z:90,META:91,CONTEXT_MENU:93,NUM_ZERO:96,
NUM_ONE:97,NUM_TWO:98,NUM_THREE:99,NUM_FOUR:100,NUM_FIVE:101,NUM_SIX:102,NUM_SEVEN:103,NUM_EIGHT:104,NUM_NINE:105,NUM_MULTIPLY:106,NUM_PLUS:107,NUM_MINUS:109,NUM_PERIOD:110,NUM_DIVISION:111,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,NUMLOCK:144,SEMICOLON:186,DASH:189,EQUALS:187,COMMA:188,PERIOD:190,SLASH:191,APOSTROPHE:192,SINGLE_QUOTE:222,OPEN_SQUARE_BRACKET:219,BACKSLASH:220,CLOSE_SQUARE_BRACKET:221,WIN_KEY:224,MAC_FF_META:224,WIN_IME:229};
goog.events.KeyCodes.isTextModifyingKeyEvent=function(e){if(e.altKey&&!e.ctrlKey||e.metaKey||e.keyCode>=goog.events.KeyCodes.F1&&e.keyCode<=goog.events.KeyCodes.F12)return false;switch(e.keyCode){case goog.events.KeyCodes.ALT:case goog.events.KeyCodes.SHIFT:case goog.events.KeyCodes.CTRL:case goog.events.KeyCodes.PAUSE:case goog.events.KeyCodes.CAPS_LOCK:case goog.events.KeyCodes.ESC:case goog.events.KeyCodes.PAGE_UP:case goog.events.KeyCodes.PAGE_DOWN:case goog.events.KeyCodes.HOME:case goog.events.KeyCodes.END:case goog.events.KeyCodes.LEFT:case goog.events.KeyCodes.RIGHT:case goog.events.KeyCodes.UP:case goog.events.KeyCodes.DOWN:case goog.events.KeyCodes.INSERT:case goog.events.KeyCodes.NUMLOCK:case goog.events.KeyCodes.CONTEXT_MENU:case goog.events.KeyCodes.PRINT_SCREEN:return false;
default:return true}};
goog.events.KeyCodes.firesKeyPressEvent=function(keyCode,opt_heldKeyCode,opt_shiftKey,opt_ctrlKey,opt_altKey){if(!goog.userAgent.IE&&!(goog.userAgent.WEBKIT&&goog.userAgent.isVersion("525")))return true;if(goog.userAgent.MAC&&opt_altKey)return goog.events.KeyCodes.isCharacterKey(keyCode);if(opt_altKey&&!opt_ctrlKey)return false;if(goog.userAgent.IE&&!opt_shiftKey&&(opt_heldKeyCode==goog.events.KeyCodes.CTRL||opt_heldKeyCode==goog.events.KeyCodes.ALT))return false;if(goog.userAgent.IE&&opt_ctrlKey&&
opt_heldKeyCode==keyCode)return false;switch(keyCode){case goog.events.KeyCodes.ENTER:return true;case goog.events.KeyCodes.ESC:return!goog.userAgent.WEBKIT}return goog.events.KeyCodes.isCharacterKey(keyCode)};
goog.events.KeyCodes.isCharacterKey=function(keyCode){if(keyCode>=goog.events.KeyCodes.ZERO&&keyCode<=goog.events.KeyCodes.NINE)return true;if(keyCode>=goog.events.KeyCodes.NUM_ZERO&&keyCode<=goog.events.KeyCodes.NUM_MULTIPLY)return true;if(keyCode>=goog.events.KeyCodes.A&&keyCode<=goog.events.KeyCodes.Z)return true;switch(keyCode){case goog.events.KeyCodes.SPACE:case goog.events.KeyCodes.QUESTION_MARK:case goog.events.KeyCodes.NUM_PLUS:case goog.events.KeyCodes.NUM_MINUS:case goog.events.KeyCodes.NUM_PERIOD:case goog.events.KeyCodes.NUM_DIVISION:case goog.events.KeyCodes.SEMICOLON:case goog.events.KeyCodes.DASH:case goog.events.KeyCodes.EQUALS:case goog.events.KeyCodes.COMMA:case goog.events.KeyCodes.PERIOD:case goog.events.KeyCodes.SLASH:case goog.events.KeyCodes.APOSTROPHE:case goog.events.KeyCodes.SINGLE_QUOTE:case goog.events.KeyCodes.OPEN_SQUARE_BRACKET:case goog.events.KeyCodes.BACKSLASH:case goog.events.KeyCodes.CLOSE_SQUARE_BRACKET:return true;
default:return false}};goog.provide("goog.events.KeyEvent");goog.provide("goog.events.KeyHandler");goog.provide("goog.events.KeyHandler.EventType");goog.require("goog.events");goog.require("goog.events.BrowserEvent");goog.require("goog.events.EventTarget");goog.require("goog.events.EventType");goog.require("goog.events.KeyCodes");goog.require("goog.userAgent");goog.events.KeyHandler=function(opt_element){goog.events.EventTarget.call(this);if(opt_element)this.attach(opt_element)};goog.inherits(goog.events.KeyHandler,goog.events.EventTarget);
goog.events.KeyHandler.prototype.element_=null;goog.events.KeyHandler.prototype.keyPressKey_=null;goog.events.KeyHandler.prototype.keyDownKey_=null;goog.events.KeyHandler.prototype.keyUpKey_=null;goog.events.KeyHandler.prototype.lastKey_=-1;goog.events.KeyHandler.prototype.keyCode_=-1;goog.events.KeyHandler.EventType={KEY:"key"};
goog.events.KeyHandler.safariKey_={"3":goog.events.KeyCodes.ENTER,"12":goog.events.KeyCodes.NUMLOCK,"63232":goog.events.KeyCodes.UP,"63233":goog.events.KeyCodes.DOWN,"63234":goog.events.KeyCodes.LEFT,"63235":goog.events.KeyCodes.RIGHT,"63236":goog.events.KeyCodes.F1,"63237":goog.events.KeyCodes.F2,"63238":goog.events.KeyCodes.F3,"63239":goog.events.KeyCodes.F4,"63240":goog.events.KeyCodes.F5,"63241":goog.events.KeyCodes.F6,"63242":goog.events.KeyCodes.F7,"63243":goog.events.KeyCodes.F8,"63244":goog.events.KeyCodes.F9,
"63245":goog.events.KeyCodes.F10,"63246":goog.events.KeyCodes.F11,"63247":goog.events.KeyCodes.F12,"63248":goog.events.KeyCodes.PRINT_SCREEN,"63272":goog.events.KeyCodes.DELETE,"63273":goog.events.KeyCodes.HOME,"63275":goog.events.KeyCodes.END,"63276":goog.events.KeyCodes.PAGE_UP,"63277":goog.events.KeyCodes.PAGE_DOWN,"63289":goog.events.KeyCodes.NUMLOCK,"63302":goog.events.KeyCodes.INSERT};
goog.events.KeyHandler.keyIdentifier_={Up:goog.events.KeyCodes.UP,Down:goog.events.KeyCodes.DOWN,Left:goog.events.KeyCodes.LEFT,Right:goog.events.KeyCodes.RIGHT,Enter:goog.events.KeyCodes.ENTER,F1:goog.events.KeyCodes.F1,F2:goog.events.KeyCodes.F2,F3:goog.events.KeyCodes.F3,F4:goog.events.KeyCodes.F4,F5:goog.events.KeyCodes.F5,F6:goog.events.KeyCodes.F6,F7:goog.events.KeyCodes.F7,F8:goog.events.KeyCodes.F8,F9:goog.events.KeyCodes.F9,F10:goog.events.KeyCodes.F10,F11:goog.events.KeyCodes.F11,F12:goog.events.KeyCodes.F12,
"U+007F":goog.events.KeyCodes.DELETE,Home:goog.events.KeyCodes.HOME,End:goog.events.KeyCodes.END,PageUp:goog.events.KeyCodes.PAGE_UP,PageDown:goog.events.KeyCodes.PAGE_DOWN,Insert:goog.events.KeyCodes.INSERT};goog.events.KeyHandler.mozKeyCodeToKeyCodeMap_={61:187,59:186};goog.events.KeyHandler.USES_KEYDOWN_=goog.userAgent.IE||goog.userAgent.WEBKIT&&goog.userAgent.isVersion("525");
goog.events.KeyHandler.prototype.handleKeyDown_=function(e){if(goog.events.KeyHandler.USES_KEYDOWN_&&!goog.events.KeyCodes.firesKeyPressEvent(e.keyCode,this.lastKey_,e.shiftKey,e.ctrlKey,e.altKey))this.handleEvent(e);else if(goog.userAgent.GECKO&&e.keyCode in goog.events.KeyHandler.mozKeyCodeToKeyCodeMap_)this.keyCode_=goog.events.KeyHandler.mozKeyCodeToKeyCodeMap_[e.keyCode];else this.keyCode_=e.keyCode};goog.events.KeyHandler.prototype.handleKeyup_=function(e){this.lastKey_=-1;this.keyCode_=-1};
goog.events.KeyHandler.prototype.handleEvent=function(e){var be=e.getBrowserEvent();var keyCode,charCode;if(goog.userAgent.IE&&e.type==goog.events.EventType.KEYPRESS){keyCode=this.keyCode_;charCode=keyCode!=goog.events.KeyCodes.ENTER&&keyCode!=goog.events.KeyCodes.ESC?be.keyCode:0}else if(goog.userAgent.WEBKIT&&e.type==goog.events.EventType.KEYPRESS){keyCode=this.keyCode_;charCode=be.charCode>=0&&be.charCode<63232&&goog.events.KeyCodes.isCharacterKey(keyCode)?be.charCode:0}else if(goog.userAgent.OPERA){keyCode=
this.keyCode_;charCode=goog.events.KeyCodes.isCharacterKey(keyCode)?be.keyCode:0}else{keyCode=be.keyCode||this.keyCode_;charCode=be.charCode||0;if(goog.userAgent.MAC&&charCode==goog.events.KeyCodes.QUESTION_MARK&&!keyCode)keyCode=goog.events.KeyCodes.SLASH}var key=keyCode;var keyIdentifier=be.keyIdentifier;if(keyCode)if(keyCode>=63232&&keyCode in goog.events.KeyHandler.safariKey_)key=goog.events.KeyHandler.safariKey_[keyCode];else{if(keyCode==25&&e.shiftKey)key=9}else if(keyIdentifier&&keyIdentifier in
goog.events.KeyHandler.keyIdentifier_)key=goog.events.KeyHandler.keyIdentifier_[keyIdentifier];var repeat=key==this.lastKey_;this.lastKey_=key;var event=new goog.events.KeyEvent(key,charCode,repeat,be);try{this.dispatchEvent(event)}finally{event.dispose()}};goog.events.KeyHandler.prototype.getElement=function(){return this.element_};
goog.events.KeyHandler.prototype.attach=function(element){if(this.keyUpKey_)this.detach();this.element_=element;this.keyPressKey_=goog.events.listen(this.element_,goog.events.EventType.KEYPRESS,this);this.keyDownKey_=goog.events.listen(this.element_,goog.events.EventType.KEYDOWN,this.handleKeyDown_,false,this);this.keyUpKey_=goog.events.listen(this.element_,goog.events.EventType.KEYUP,this.handleKeyup_,false,this)};
goog.events.KeyHandler.prototype.detach=function(){if(this.keyPressKey_){goog.events.unlistenByKey(this.keyPressKey_);goog.events.unlistenByKey(this.keyDownKey_);goog.events.unlistenByKey(this.keyUpKey_);this.keyPressKey_=null;this.keyDownKey_=null;this.keyUpKey_=null}this.element_=null;this.lastKey_=-1};goog.events.KeyHandler.prototype.disposeInternal=function(){goog.events.KeyHandler.superClass_.disposeInternal.call(this);this.detach()};
goog.events.KeyEvent=function(keyCode,charCode,repeat,browserEvent){goog.events.BrowserEvent.call(this,browserEvent);this.type=goog.events.KeyHandler.EventType.KEY;this.keyCode=keyCode;this.charCode=charCode;this.repeat=repeat};goog.inherits(goog.events.KeyEvent,goog.events.BrowserEvent);goog.provide("goog.ui.ControlRenderer");goog.require("goog.array");goog.require("goog.dom");goog.require("goog.dom.a11y");goog.require("goog.dom.a11y.State");goog.require("goog.dom.classes");goog.require("goog.object");goog.require("goog.style");goog.require("goog.ui.Component.State");goog.require("goog.ui.ControlContent");goog.require("goog.userAgent");goog.ui.ControlRenderer=function(){};goog.addSingletonGetter(goog.ui.ControlRenderer);
goog.ui.ControlRenderer.getCustomRenderer=function(ctor,cssClassName){var renderer=new ctor;renderer.getCssClass=function(){return cssClassName};return renderer};goog.ui.ControlRenderer.CSS_CLASS=goog.getCssName("goog-control");goog.ui.ControlRenderer.IE6_CLASS_COMBINATIONS=[];goog.ui.ControlRenderer.ARIA_STATE_MAP_;goog.ui.ControlRenderer.prototype.getAriaRole=function(){return undefined};
goog.ui.ControlRenderer.prototype.createDom=function(control){return control.getDomHelper().createDom("div",this.getClassNames(control).join(" "),control.getContent())};goog.ui.ControlRenderer.prototype.getContentElement=function(element){return element};
goog.ui.ControlRenderer.prototype.enableClassName=function(control,className,enable){var element=control.getElement?control.getElement():control;if(element)if(goog.userAgent.IE&&!goog.userAgent.isVersion("7")){var combinedClasses=this.getAppliedCombinedClassNames_(goog.dom.classes.get(element),className);combinedClasses.push(className);var f=enable?goog.dom.classes.add:goog.dom.classes.remove;goog.partial(f,element).apply(null,combinedClasses)}else goog.dom.classes.enable(element,className,enable)};
goog.ui.ControlRenderer.prototype.enableExtraClassName=function(control,className,enable){this.enableClassName(control,className,enable)};goog.ui.ControlRenderer.prototype.canDecorate=function(element){return true};
goog.ui.ControlRenderer.prototype.decorate=function(control,element){if(element.id)control.setId(element.id);var contentElem=this.getContentElement(element);if(contentElem&&contentElem.firstChild)control.setContentInternal(contentElem.firstChild.nextSibling?goog.array.clone(contentElem.childNodes):contentElem.firstChild);else control.setContentInternal(null);var state=0;var rendererClassName=this.getCssClass();var structuralClassName=this.getStructuralCssClass();var hasRendererClassName=false;var hasStructuralClassName=
false;var hasCombinedClassName=false;var classNames=goog.dom.classes.get(element);goog.array.forEach(classNames,function(className){if(!hasRendererClassName&&className==rendererClassName){hasRendererClassName=true;if(structuralClassName==rendererClassName)hasStructuralClassName=true}else if(!hasStructuralClassName&&className==structuralClassName)hasStructuralClassName=true;else state|=this.getStateFromClass(className)},this);control.setStateInternal(state);if(!hasRendererClassName){classNames.push(rendererClassName);
if(structuralClassName==rendererClassName)hasStructuralClassName=true}if(!hasStructuralClassName)classNames.push(structuralClassName);var extraClassNames=control.getExtraClassNames();if(extraClassNames)classNames.push.apply(classNames,extraClassNames);if(goog.userAgent.IE&&!goog.userAgent.isVersion("7")){var combinedClasses=this.getAppliedCombinedClassNames_(classNames);if(combinedClasses.length>0){classNames.push.apply(classNames,combinedClasses);hasCombinedClassName=true}}if(!hasRendererClassName||
!hasStructuralClassName||extraClassNames||hasCombinedClassName)goog.dom.classes.set(element,classNames.join(" "));return element};goog.ui.ControlRenderer.prototype.initializeDom=function(control){if(control.isRightToLeft())this.setRightToLeft(control.getElement(),true);if(control.isEnabled())this.setFocusable(control,control.isVisible())};
goog.ui.ControlRenderer.prototype.setAriaRole=function(element){if(goog.userAgent.GECKO){var ariaRole=this.getAriaRole();if(ariaRole)goog.dom.a11y.setRole(element,ariaRole)}};goog.ui.ControlRenderer.prototype.setAllowTextSelection=function(element,allow){goog.style.setUnselectable(element,!allow,!goog.userAgent.IE&&!goog.userAgent.OPERA)};
goog.ui.ControlRenderer.prototype.setRightToLeft=function(element,rightToLeft){this.enableClassName(element,goog.getCssName(this.getStructuralCssClass(),"rtl"),rightToLeft)};goog.ui.ControlRenderer.prototype.isFocusable=function(control){var keyTarget;if(control.isSupportedState(goog.ui.Component.State.FOCUSED)&&(keyTarget=control.getKeyEventTarget()))return goog.dom.isFocusableTabIndex(keyTarget);return false};
goog.ui.ControlRenderer.prototype.setFocusable=function(control,focusable){var keyTarget;if(control.isSupportedState(goog.ui.Component.State.FOCUSED)&&(keyTarget=control.getKeyEventTarget())){if(!focusable&&control.isFocused()){try{keyTarget.blur()}catch(e){}if(control.isFocused())control.handleBlur(null)}if(goog.dom.isFocusableTabIndex(keyTarget)!=focusable)goog.dom.setFocusableTabIndex(keyTarget,focusable)}};
goog.ui.ControlRenderer.prototype.setVisible=function(element,visible){goog.style.showElement(element,visible)};goog.ui.ControlRenderer.prototype.setState=function(control,state,enable){var element=control.getElement();if(element){var className=this.getClassForState(state);if(className)this.enableClassName(control,className,enable);this.updateAriaState(element,state,enable)}};
goog.ui.ControlRenderer.prototype.updateAriaState=function(element,state,enable){if(goog.userAgent.GECKO){if(!goog.ui.ControlRenderer.ARIA_STATE_MAP_)goog.ui.ControlRenderer.ARIA_STATE_MAP_=goog.object.create(goog.ui.Component.State.DISABLED,goog.dom.a11y.State.DISABLED,goog.ui.Component.State.ACTIVE,goog.dom.a11y.State.PRESSED,goog.ui.Component.State.SELECTED,goog.dom.a11y.State.SELECTED,goog.ui.Component.State.CHECKED,goog.dom.a11y.State.CHECKED,goog.ui.Component.State.OPENED,goog.dom.a11y.State.EXPANDED);
var ariaState=goog.ui.ControlRenderer.ARIA_STATE_MAP_[state];if(ariaState)goog.dom.a11y.setState(element,ariaState,enable)}};
goog.ui.ControlRenderer.prototype.setContent=function(element,content){var contentElem=this.getContentElement(element);if(contentElem){goog.dom.removeChildren(contentElem);if(content)if(goog.isString(content))goog.dom.setTextContent(contentElem,content);else{var childHandler=function(child){if(child){var doc=goog.dom.getOwnerDocument(contentElem);contentElem.appendChild(goog.isString(child)?doc.createTextNode(child):child)}};if(goog.isArray(content))goog.array.forEach(content,childHandler);else if(goog.isArrayLike(content)&&
!("nodeType"in content))goog.array.forEach(goog.array.clone(content),childHandler);else childHandler(content)}}};goog.ui.ControlRenderer.prototype.getKeyEventTarget=function(control){return control.getElement()};goog.ui.ControlRenderer.prototype.getCssClass=function(){return goog.ui.ControlRenderer.CSS_CLASS};goog.ui.ControlRenderer.prototype.getIe6ClassCombinations=function(){return[]};goog.ui.ControlRenderer.prototype.getStructuralCssClass=function(){return this.getCssClass()};
goog.ui.ControlRenderer.prototype.getClassNames=function(control){var cssClass=this.getCssClass();var classNames=[cssClass];var structuralCssClass=this.getStructuralCssClass();if(structuralCssClass!=cssClass)classNames.push(structuralCssClass);var classNamesForState=this.getClassNamesForState(control.getState());classNames.push.apply(classNames,classNamesForState);var extraClassNames=control.getExtraClassNames();if(extraClassNames)classNames.push.apply(classNames,extraClassNames);if(goog.userAgent.IE&&
!goog.userAgent.isVersion("7"))classNames.push.apply(classNames,this.getAppliedCombinedClassNames_(classNames));return classNames};
goog.ui.ControlRenderer.prototype.getAppliedCombinedClassNames_=function(classes,opt_includedClass){var toAdd=[];if(opt_includedClass)classes=classes.concat([opt_includedClass]);goog.array.forEach(this.getIe6ClassCombinations(),function(combo){if(goog.array.every(combo,goog.partial(goog.array.contains,classes))&&(!opt_includedClass||goog.array.contains(combo,opt_includedClass)))toAdd.push(combo.join("_"))});return toAdd};
goog.ui.ControlRenderer.prototype.getClassNamesForState=function(state){var classNames=[];while(state){var mask=state&-state;classNames.push(this.getClassForState(mask));state&=~mask}return classNames};goog.ui.ControlRenderer.prototype.getClassForState=function(state){if(!this.classByState_)this.createClassByStateMap_();return this.classByState_[state]};
goog.ui.ControlRenderer.prototype.getStateFromClass=function(className){if(!this.stateByClass_)this.createStateByClassMap_();var state=parseInt(this.stateByClass_[className],10);return isNaN(state)?0:state};
goog.ui.ControlRenderer.prototype.createClassByStateMap_=function(){var baseClass=this.getStructuralCssClass();this.classByState_=goog.object.create(goog.ui.Component.State.DISABLED,goog.getCssName(baseClass,"disabled"),goog.ui.Component.State.HOVER,goog.getCssName(baseClass,"hover"),goog.ui.Component.State.ACTIVE,goog.getCssName(baseClass,"active"),goog.ui.Component.State.SELECTED,goog.getCssName(baseClass,"selected"),goog.ui.Component.State.CHECKED,goog.getCssName(baseClass,"checked"),goog.ui.Component.State.FOCUSED,
goog.getCssName(baseClass,"focused"),goog.ui.Component.State.OPENED,goog.getCssName(baseClass,"open"))};goog.ui.ControlRenderer.prototype.createStateByClassMap_=function(){if(!this.classByState_)this.createClassByStateMap_();this.stateByClass_=goog.object.transpose(this.classByState_)};goog.provide("goog.ui.registry");goog.require("goog.dom.classes");goog.ui.registry.getDefaultRenderer=function(componentCtor){var key;var rendererCtor;while(componentCtor){key=goog.getUid(componentCtor);if(rendererCtor=goog.ui.registry.defaultRenderers_[key])break;componentCtor=componentCtor.superClass_?componentCtor.superClass_.constructor:null}if(rendererCtor)return goog.isFunction(rendererCtor.getInstance)?rendererCtor.getInstance():new rendererCtor;return null};
goog.ui.registry.setDefaultRenderer=function(componentCtor,rendererCtor){if(!goog.isFunction(componentCtor))throw Error("Invalid component class "+componentCtor);if(!goog.isFunction(rendererCtor))throw Error("Invalid renderer class "+rendererCtor);var key=goog.getUid(componentCtor);goog.ui.registry.defaultRenderers_[key]=rendererCtor};
goog.ui.registry.getDecoratorByClassName=function(className){return className in goog.ui.registry.decoratorFunctions_?goog.ui.registry.decoratorFunctions_[className]():null};goog.ui.registry.setDecoratorByClassName=function(className,decoratorFn){if(!className)throw Error("Invalid class name "+className);if(!goog.isFunction(decoratorFn))throw Error("Invalid decorator function "+decoratorFn);goog.ui.registry.decoratorFunctions_[className]=decoratorFn};
goog.ui.registry.getDecorator=function(element){var decorator;var classNames=goog.dom.classes.get(element);for(var i=0,len=classNames.length;i<len;i++)if(decorator=goog.ui.registry.getDecoratorByClassName(classNames[i]))return decorator;return null};goog.ui.registry.reset=function(){goog.ui.registry.defaultRenderers_={};goog.ui.registry.decoratorFunctions_={}};goog.ui.registry.defaultRenderers_={};goog.ui.registry.decoratorFunctions_={};goog.provide("goog.ui.decorate");goog.require("goog.ui.registry");goog.ui.decorate=function(element){var decorator=goog.ui.registry.getDecorator(element);if(decorator)decorator.decorate(element);return decorator};goog.provide("goog.ui.Control");goog.require("goog.array");goog.require("goog.dom");goog.require("goog.events.BrowserEvent.MouseButton");goog.require("goog.events.Event");goog.require("goog.events.EventType");goog.require("goog.events.KeyCodes");goog.require("goog.events.KeyHandler");goog.require("goog.events.KeyHandler.EventType");goog.require("goog.string");goog.require("goog.ui.Component");goog.require("goog.ui.Component.Error");goog.require("goog.ui.Component.EventType");goog.require("goog.ui.Component.State");
goog.require("goog.ui.ControlContent");goog.require("goog.ui.ControlRenderer");goog.require("goog.ui.decorate");goog.require("goog.ui.registry");goog.require("goog.userAgent");goog.ui.Control=function(content,opt_renderer,opt_domHelper){goog.ui.Component.call(this,opt_domHelper);this.renderer_=opt_renderer||goog.ui.registry.getDefaultRenderer(this.constructor);this.setContentInternal(content)};goog.inherits(goog.ui.Control,goog.ui.Component);goog.ui.Control.registerDecorator=goog.ui.registry.setDecoratorByClassName;
goog.ui.Control.getDecorator=goog.ui.registry.getDecorator;goog.ui.Control.decorate=goog.ui.decorate;goog.ui.Control.prototype.renderer_;goog.ui.Control.prototype.content_=null;goog.ui.Control.prototype.state_=0;goog.ui.Control.prototype.supportedStates_=goog.ui.Component.State.DISABLED|goog.ui.Component.State.HOVER|goog.ui.Component.State.ACTIVE|goog.ui.Component.State.FOCUSED;goog.ui.Control.prototype.autoStates_=goog.ui.Component.State.ALL;
goog.ui.Control.prototype.statesWithTransitionEvents_=0;goog.ui.Control.prototype.visible_=true;goog.ui.Control.prototype.keyHandler_;goog.ui.Control.prototype.extraClassNames_=null;goog.ui.Control.prototype.handleMouseEvents_=true;goog.ui.Control.prototype.allowTextSelection_=false;goog.ui.Control.prototype.isHandleMouseEvents=function(){return this.handleMouseEvents_};
goog.ui.Control.prototype.setHandleMouseEvents=function(enable){if(this.isInDocument()&&enable!=this.handleMouseEvents_)this.enableMouseEventHandling_(enable);this.handleMouseEvents_=enable};goog.ui.Control.prototype.getKeyEventTarget=function(){return this.renderer_.getKeyEventTarget(this)};goog.ui.Control.prototype.getKeyHandler=function(){return this.keyHandler_||(this.keyHandler_=new goog.events.KeyHandler)};goog.ui.Control.prototype.getRenderer=function(){return this.renderer_};
goog.ui.Control.prototype.setRenderer=function(renderer){if(this.isInDocument())throw Error(goog.ui.Component.Error.ALREADY_RENDERED);if(this.getElement())this.setElementInternal(null);this.renderer_=renderer};goog.ui.Control.prototype.getExtraClassNames=function(){return this.extraClassNames_};
goog.ui.Control.prototype.addClassName=function(className){if(className){if(this.extraClassNames_){if(!goog.array.contains(this.extraClassNames_,className))this.extraClassNames_.push(className)}else this.extraClassNames_=[className];this.renderer_.enableExtraClassName(this,className,true)}};
goog.ui.Control.prototype.removeClassName=function(className){if(className&&this.extraClassNames_){goog.array.remove(this.extraClassNames_,className);if(this.extraClassNames_.length==0)this.extraClassNames_=null;this.renderer_.enableExtraClassName(this,className,false)}};goog.ui.Control.prototype.enableClassName=function(className,enable){if(enable)this.addClassName(className);else this.removeClassName(className)};
goog.ui.Control.prototype.createDom=function(){var element=this.renderer_.createDom(this);this.setElementInternal(element);this.renderer_.setAriaRole(element);if(!this.isAllowTextSelection())this.renderer_.setAllowTextSelection(element,false);if(!this.isVisible())this.renderer_.setVisible(element,false)};goog.ui.Control.prototype.getContentElement=function(){return this.renderer_.getContentElement(this.getElement())};goog.ui.Control.prototype.canDecorate=function(element){return this.renderer_.canDecorate(element)};
goog.ui.Control.prototype.decorateInternal=function(element){element=this.renderer_.decorate(this,element);this.setElementInternal(element);this.renderer_.setAriaRole(element);if(!this.isAllowTextSelection())this.renderer_.setAllowTextSelection(element,false);this.visible_=element.style.display!="none"};
goog.ui.Control.prototype.enterDocument=function(){goog.ui.Control.superClass_.enterDocument.call(this);this.renderer_.initializeDom(this);if(this.supportedStates_&~goog.ui.Component.State.DISABLED){if(this.isHandleMouseEvents())this.enableMouseEventHandling_(true);if(this.isSupportedState(goog.ui.Component.State.FOCUSED)){var keyTarget=this.getKeyEventTarget();if(keyTarget){var keyHandler=this.getKeyHandler();keyHandler.attach(keyTarget);this.getHandler().listen(keyHandler,goog.events.KeyHandler.EventType.KEY,
this.handleKeyEvent).listen(keyTarget,goog.events.EventType.FOCUS,this.handleFocus).listen(keyTarget,goog.events.EventType.BLUR,this.handleBlur)}}}};
goog.ui.Control.prototype.enableMouseEventHandling_=function(enable){var handler=this.getHandler();var element=this.getElement();if(enable){handler.listen(element,goog.events.EventType.MOUSEOVER,this.handleMouseOver).listen(element,goog.events.EventType.MOUSEDOWN,this.handleMouseDown).listen(element,goog.events.EventType.MOUSEUP,this.handleMouseUp).listen(element,goog.events.EventType.MOUSEOUT,this.handleMouseOut);if(goog.userAgent.IE)handler.listen(element,goog.events.EventType.DBLCLICK,this.handleDblClick)}else{handler.unlisten(element,
goog.events.EventType.MOUSEOVER,this.handleMouseOver).unlisten(element,goog.events.EventType.MOUSEDOWN,this.handleMouseDown).unlisten(element,goog.events.EventType.MOUSEUP,this.handleMouseUp).unlisten(element,goog.events.EventType.MOUSEOUT,this.handleMouseOut);if(goog.userAgent.IE)handler.unlisten(element,goog.events.EventType.DBLCLICK,this.handleDblClick)}};
goog.ui.Control.prototype.exitDocument=function(){goog.ui.Control.superClass_.exitDocument.call(this);if(this.keyHandler_)this.keyHandler_.detach();if(this.isVisible()&&this.isEnabled())this.renderer_.setFocusable(this,false)};goog.ui.Control.prototype.disposeInternal=function(){goog.ui.Control.superClass_.disposeInternal.call(this);if(this.keyHandler_){this.keyHandler_.dispose();delete this.keyHandler_}delete this.renderer_;this.content_=null;this.extraClassNames_=null};
goog.ui.Control.prototype.getContent=function(){return this.content_};goog.ui.Control.prototype.setContent=function(content){this.renderer_.setContent(this.getElement(),content);this.setContentInternal(content)};goog.ui.Control.prototype.setContentInternal=function(content){this.content_=content};
goog.ui.Control.prototype.getCaption=function(){var content=this.getContent();if(!content||goog.isString(content))return content;var caption=goog.isArray(content)?goog.array.map(content,goog.dom.getTextContent).join(""):goog.dom.getTextContent(content);return caption&&goog.string.trim(caption)};goog.ui.Control.prototype.setCaption=function(caption){this.setContent(caption)};
goog.ui.Control.prototype.setRightToLeft=function(rightToLeft){goog.ui.Control.superClass_.setRightToLeft.call(this,rightToLeft);var element=this.getElement();if(element)this.renderer_.setRightToLeft(element,rightToLeft)};goog.ui.Control.prototype.isAllowTextSelection=function(){return this.allowTextSelection_};goog.ui.Control.prototype.setAllowTextSelection=function(allow){this.allowTextSelection_=allow;var element=this.getElement();if(element)this.renderer_.setAllowTextSelection(element,allow)};
goog.ui.Control.prototype.isVisible=function(){return this.visible_};goog.ui.Control.prototype.setVisible=function(visible,opt_force){if(opt_force||this.visible_!=visible&&this.dispatchEvent(visible?goog.ui.Component.EventType.SHOW:goog.ui.Component.EventType.HIDE)){var element=this.getElement();if(element)this.renderer_.setVisible(element,visible);if(this.isEnabled())this.renderer_.setFocusable(this,visible);this.visible_=visible;return true}return false};goog.ui.Control.prototype.isEnabled=function(){return!this.hasState(goog.ui.Component.State.DISABLED)};
goog.ui.Control.prototype.isParentDisabled_=function(){var parent=this.getParent();return!!parent&&typeof parent.isEnabled=="function"&&!parent.isEnabled()};goog.ui.Control.prototype.setEnabled=function(enable){if(!this.isParentDisabled_()&&this.isTransitionAllowed(goog.ui.Component.State.DISABLED,!enable)){if(!enable){this.setActive(false);this.setHighlighted(false)}if(this.isVisible())this.renderer_.setFocusable(this,enable);this.setState(goog.ui.Component.State.DISABLED,!enable)}};
goog.ui.Control.prototype.isHighlighted=function(){return this.hasState(goog.ui.Component.State.HOVER)};goog.ui.Control.prototype.setHighlighted=function(highlight){if(this.isTransitionAllowed(goog.ui.Component.State.HOVER,highlight))this.setState(goog.ui.Component.State.HOVER,highlight)};goog.ui.Control.prototype.isActive=function(){return this.hasState(goog.ui.Component.State.ACTIVE)};
goog.ui.Control.prototype.setActive=function(active){if(this.isTransitionAllowed(goog.ui.Component.State.ACTIVE,active))this.setState(goog.ui.Component.State.ACTIVE,active)};goog.ui.Control.prototype.isSelected=function(){return this.hasState(goog.ui.Component.State.SELECTED)};goog.ui.Control.prototype.setSelected=function(select){if(this.isTransitionAllowed(goog.ui.Component.State.SELECTED,select))this.setState(goog.ui.Component.State.SELECTED,select)};goog.ui.Control.prototype.isChecked=function(){return this.hasState(goog.ui.Component.State.CHECKED)};
goog.ui.Control.prototype.setChecked=function(check){if(this.isTransitionAllowed(goog.ui.Component.State.CHECKED,check))this.setState(goog.ui.Component.State.CHECKED,check)};goog.ui.Control.prototype.isFocused=function(){return this.hasState(goog.ui.Component.State.FOCUSED)};goog.ui.Control.prototype.setFocused=function(focused){if(this.isTransitionAllowed(goog.ui.Component.State.FOCUSED,focused))this.setState(goog.ui.Component.State.FOCUSED,focused)};goog.ui.Control.prototype.isOpen=function(){return this.hasState(goog.ui.Component.State.OPENED)};
goog.ui.Control.prototype.setOpen=function(open){if(this.isTransitionAllowed(goog.ui.Component.State.OPENED,open))this.setState(goog.ui.Component.State.OPENED,open)};goog.ui.Control.prototype.getState=function(){return this.state_};goog.ui.Control.prototype.hasState=function(state){return!!(this.state_&state)};
goog.ui.Control.prototype.setState=function(state,enable){if(this.isSupportedState(state)&&enable!=this.hasState(state)){this.renderer_.setState(this,state,enable);this.state_=enable?this.state_|state:this.state_&~state}};goog.ui.Control.prototype.setStateInternal=function(state){this.state_=state};goog.ui.Control.prototype.isSupportedState=function(state){return!!(this.supportedStates_&state)};
goog.ui.Control.prototype.setSupportedState=function(state,support){if(this.isInDocument()&&this.hasState(state)&&!support)throw Error(goog.ui.Component.Error.ALREADY_RENDERED);if(!support&&this.hasState(state))this.setState(state,false);this.supportedStates_=support?this.supportedStates_|state:this.supportedStates_&~state};goog.ui.Control.prototype.isAutoState=function(state){return!!(this.autoStates_&state)&&this.isSupportedState(state)};
goog.ui.Control.prototype.setAutoStates=function(states,enable){this.autoStates_=enable?this.autoStates_|states:this.autoStates_&~states};goog.ui.Control.prototype.isDispatchTransitionEvents=function(state){return!!(this.statesWithTransitionEvents_&state)&&this.isSupportedState(state)};goog.ui.Control.prototype.setDispatchTransitionEvents=function(states,enable){this.statesWithTransitionEvents_=enable?this.statesWithTransitionEvents_|states:this.statesWithTransitionEvents_&~states};
goog.ui.Control.prototype.isTransitionAllowed=function(state,enable){return this.isSupportedState(state)&&this.hasState(state)!=enable&&(!(this.statesWithTransitionEvents_&state)||this.dispatchEvent(goog.ui.Component.getStateTransitionEvent(state,enable)))&&!this.isDisposed()};goog.ui.Control.prototype.handleMouseOver=function(e){if(e.relatedTarget&&!goog.dom.contains(this.getElement(),e.relatedTarget)&&this.dispatchEvent(goog.ui.Component.EventType.ENTER)&&this.isEnabled()&&this.isAutoState(goog.ui.Component.State.HOVER))this.setHighlighted(true)};
goog.ui.Control.prototype.handleMouseOut=function(e){if(e.relatedTarget&&!goog.dom.contains(this.getElement(),e.relatedTarget)&&this.dispatchEvent(goog.ui.Component.EventType.LEAVE)){if(this.isAutoState(goog.ui.Component.State.ACTIVE))this.setActive(false);if(this.isAutoState(goog.ui.Component.State.HOVER))this.setHighlighted(false)}};
goog.ui.Control.prototype.handleMouseDown=function(e){if(this.isEnabled()){if(this.isAutoState(goog.ui.Component.State.HOVER))this.setHighlighted(true);if(e.isButton(goog.events.BrowserEvent.MouseButton.LEFT)){if(this.isAutoState(goog.ui.Component.State.ACTIVE))this.setActive(true);if(this.renderer_.isFocusable(this))this.getKeyEventTarget().focus()}}if(!this.isAllowTextSelection()&&e.isButton(goog.events.BrowserEvent.MouseButton.LEFT))e.preventDefault()};
goog.ui.Control.prototype.handleMouseUp=function(e){if(this.isEnabled()){if(this.isAutoState(goog.ui.Component.State.HOVER))this.setHighlighted(true);if(this.isActive()&&this.performActionInternal(e)&&this.isAutoState(goog.ui.Component.State.ACTIVE))this.setActive(false)}};goog.ui.Control.prototype.handleDblClick=function(e){if(this.isEnabled())this.performActionInternal(e)};
goog.ui.Control.prototype.performActionInternal=function(e){if(this.isAutoState(goog.ui.Component.State.CHECKED))this.setChecked(!this.isChecked());if(this.isAutoState(goog.ui.Component.State.SELECTED))this.setSelected(true);if(this.isAutoState(goog.ui.Component.State.OPENED))this.setOpen(!this.isOpen());var actionEvent=new goog.events.Event(goog.ui.Component.EventType.ACTION,this);if(e){var properties=["altKey","ctrlKey","metaKey","shiftKey","platformModifierKey"];for(var property,i=0;property=properties[i];i++)actionEvent[property]=
e[property]}return this.dispatchEvent(actionEvent)};goog.ui.Control.prototype.handleFocus=function(e){if(this.isAutoState(goog.ui.Component.State.FOCUSED))this.setFocused(true)};goog.ui.Control.prototype.handleBlur=function(e){if(this.isAutoState(goog.ui.Component.State.ACTIVE))this.setActive(false);if(this.isAutoState(goog.ui.Component.State.FOCUSED))this.setFocused(false)};
goog.ui.Control.prototype.handleKeyEvent=function(e){if(this.isVisible()&&this.isEnabled()&&this.handleKeyEventInternal(e)){e.preventDefault();e.stopPropagation();return true}return false};goog.ui.Control.prototype.handleKeyEventInternal=function(e){return e.keyCode==goog.events.KeyCodes.ENTER&&this.performActionInternal(e)};goog.ui.registry.setDefaultRenderer(goog.ui.Control,goog.ui.ControlRenderer);goog.ui.registry.setDecoratorByClassName(goog.ui.ControlRenderer.CSS_CLASS,function(){return new goog.ui.Control(null)});goog.provide("goog.ui.MenuSeparatorRenderer");goog.require("goog.dom");goog.require("goog.dom.classes");goog.require("goog.ui.ControlContent");goog.require("goog.ui.ControlRenderer");goog.ui.MenuSeparatorRenderer=function(){goog.ui.ControlRenderer.call(this)};goog.inherits(goog.ui.MenuSeparatorRenderer,goog.ui.ControlRenderer);goog.addSingletonGetter(goog.ui.MenuSeparatorRenderer);goog.ui.MenuSeparatorRenderer.CSS_CLASS=goog.getCssName("goog-menuseparator");
goog.ui.MenuSeparatorRenderer.prototype.createDom=function(separator){return separator.getDomHelper().createDom("div",this.getCssClass())};goog.ui.MenuSeparatorRenderer.prototype.decorate=function(separator,element){if(element.tagName=="HR"){var hr=element;element=this.createDom(separator);goog.dom.insertSiblingBefore(element,hr);goog.dom.removeNode(hr)}else goog.dom.classes.add(element,this.getCssClass());return element};goog.ui.MenuSeparatorRenderer.prototype.setContent=function(separator,content){};
goog.ui.MenuSeparatorRenderer.prototype.getCssClass=function(){return goog.ui.MenuSeparatorRenderer.CSS_CLASS};goog.provide("goog.ui.Separator");goog.require("goog.dom.a11y");goog.require("goog.ui.Component.State");goog.require("goog.ui.Control");goog.require("goog.ui.MenuSeparatorRenderer");goog.require("goog.ui.registry");
goog.ui.Separator=function(opt_renderer,opt_domHelper){goog.ui.Control.call(this,null,opt_renderer||goog.ui.MenuSeparatorRenderer.getInstance(),opt_domHelper);this.setSupportedState(goog.ui.Component.State.DISABLED,false);this.setSupportedState(goog.ui.Component.State.HOVER,false);this.setSupportedState(goog.ui.Component.State.ACTIVE,false);this.setSupportedState(goog.ui.Component.State.FOCUSED,false);this.setStateInternal(goog.ui.Component.State.DISABLED)};goog.inherits(goog.ui.Separator,goog.ui.Control);
goog.ui.Separator.prototype.enterDocument=function(){goog.ui.Separator.superClass_.enterDocument.call(this);goog.dom.a11y.setRole(this.getElement(),"separator")};goog.ui.registry.setDecoratorByClassName(goog.ui.MenuSeparatorRenderer.CSS_CLASS,function(){return new goog.ui.Separator});goog.provide("goog.ui.ContainerRenderer");goog.require("goog.array");goog.require("goog.dom");goog.require("goog.dom.a11y");goog.require("goog.dom.classes");goog.require("goog.string");goog.require("goog.style");goog.require("goog.ui.Separator");goog.require("goog.ui.registry");goog.require("goog.userAgent");goog.ui.ContainerRenderer=function(){};goog.addSingletonGetter(goog.ui.ContainerRenderer);
goog.ui.ContainerRenderer.getCustomRenderer=function(ctor,cssClassName){var renderer=new ctor;renderer.getCssClass=function(){return cssClassName};return renderer};goog.ui.ContainerRenderer.CSS_CLASS=goog.getCssName("goog-container");goog.ui.ContainerRenderer.prototype.getAriaRole=function(){return undefined};
goog.ui.ContainerRenderer.prototype.hasTabIndex=function(element){if(element){var attrNode=element.getAttributeNode("tabindex");if(attrNode&&attrNode.specified){var index=element.tabIndex;return goog.isNumber(index)&&index>=0}}return false};goog.ui.ContainerRenderer.prototype.enableTabIndex=function(element,enable){if(element)element.tabIndex=enable?0:-1};goog.ui.ContainerRenderer.prototype.createDom=function(container){return container.getDomHelper().createDom("div",this.getClassNames(container).join(" "))};
goog.ui.ContainerRenderer.prototype.getContentElement=function(element){return element};goog.ui.ContainerRenderer.prototype.canDecorate=function(element){return element.tagName=="DIV"};
goog.ui.ContainerRenderer.prototype.decorate=function(container,element){if(element.id)container.setId(element.id);var baseClass=this.getCssClass();var hasBaseClass=false;var classNames=goog.dom.classes.get(element);if(classNames)goog.array.forEach(classNames,function(className){if(className==baseClass)hasBaseClass=true;else if(className)this.setStateFromClassName(container,className,baseClass)},this);if(!hasBaseClass)goog.dom.classes.add(element,baseClass);this.decorateChildren(container,element);
return element};goog.ui.ContainerRenderer.prototype.setStateFromClassName=function(container,className,baseClass){if(className==goog.getCssName(baseClass,"disabled"))container.setEnabled(false);else if(className==goog.getCssName(baseClass,"horizontal"))container.setOrientation(goog.ui.Container.Orientation.HORIZONTAL);else if(className==goog.getCssName(baseClass,"vertical"))container.setOrientation(goog.ui.Container.Orientation.VERTICAL)};
goog.ui.ContainerRenderer.prototype.decorateChildren=function(container,element){if(element){var node=element.firstChild,next;while(node&&node.parentNode==element){next=node.nextSibling;if(node.nodeType==goog.dom.NodeType.ELEMENT){var child=this.getDecoratorForChild(node);if(child){child.setElementInternal(node);if(!container.isEnabled())child.setEnabled(false);container.addChild(child);child.decorate(node)}}else if(!node.nodeValue||goog.string.trim(node.nodeValue)=="")element.removeChild(node);node=
next}}};goog.ui.ContainerRenderer.prototype.getDecoratorForChild=function(element){return goog.ui.registry.getDecorator(element)};goog.ui.ContainerRenderer.prototype.initializeDom=function(container){var elem=container.getElement();goog.style.setUnselectable(elem,true,goog.userAgent.GECKO);if(goog.userAgent.IE)elem.hideFocus=true;var ariaRole=this.getAriaRole();if(ariaRole)goog.dom.a11y.setRole(elem,ariaRole)};goog.ui.ContainerRenderer.prototype.getKeyEventTarget=function(container){return container.getElement()};
goog.ui.ContainerRenderer.prototype.getCssClass=function(){return goog.ui.ContainerRenderer.CSS_CLASS};goog.ui.ContainerRenderer.prototype.getClassNames=function(container){var baseClass=this.getCssClass();var isHorizontal=container.getOrientation()==goog.ui.Container.Orientation.HORIZONTAL;var classNames=[baseClass,isHorizontal?goog.getCssName(baseClass,"horizontal"):goog.getCssName(baseClass,"vertical")];if(!container.isEnabled())classNames.push(goog.getCssName(baseClass,"disabled"));return classNames};
goog.ui.ContainerRenderer.prototype.getDefaultOrientation=function(){return goog.ui.Container.Orientation.VERTICAL};goog.provide("goog.ui.Container");goog.provide("goog.ui.Container.Orientation");goog.require("goog.dom");goog.require("goog.dom.a11y");goog.require("goog.dom.a11y.State");goog.require("goog.events.EventType");goog.require("goog.events.KeyCodes");goog.require("goog.events.KeyHandler");goog.require("goog.events.KeyHandler.EventType");goog.require("goog.style");goog.require("goog.ui.Component");goog.require("goog.ui.Component.Error");goog.require("goog.ui.Component.EventType");goog.require("goog.ui.Component.State");
goog.require("goog.ui.ContainerRenderer");goog.ui.Container=function(opt_orientation,opt_renderer,opt_domHelper){goog.ui.Component.call(this,opt_domHelper);this.renderer_=opt_renderer||goog.ui.ContainerRenderer.getInstance();this.orientation_=opt_orientation||this.renderer_.getDefaultOrientation()};goog.inherits(goog.ui.Container,goog.ui.Component);goog.ui.Container.EventType={AFTER_SHOW:"aftershow"};goog.ui.Container.Orientation={HORIZONTAL:"horizontal",VERTICAL:"vertical"};
goog.ui.Container.prototype.keyEventTarget_=null;goog.ui.Container.prototype.keyHandler_=null;goog.ui.Container.prototype.renderer_=null;goog.ui.Container.prototype.orientation_=null;goog.ui.Container.prototype.visible_=true;goog.ui.Container.prototype.enabled_=true;goog.ui.Container.prototype.focusable_=true;goog.ui.Container.prototype.highlightedIndex_=-1;goog.ui.Container.prototype.openItem_=null;goog.ui.Container.prototype.mouseButtonPressed_=false;
goog.ui.Container.prototype.allowFocusableChildren_=false;goog.ui.Container.prototype.childElementIdMap_=null;goog.ui.Container.prototype.getKeyEventTarget=function(){return this.keyEventTarget_||this.renderer_.getKeyEventTarget(this)};
goog.ui.Container.prototype.setKeyEventTarget=function(element){if(this.focusable_){var oldTarget=this.getKeyEventTarget();var inDocument=this.isInDocument();this.keyEventTarget_=element;var newTarget=this.getKeyEventTarget();if(inDocument){this.keyEventTarget_=oldTarget;this.enableFocusHandling_(false);this.keyEventTarget_=element;this.getKeyHandler().attach(newTarget);this.enableFocusHandling_(true)}}else throw Error("Can't set key event target for container "+"that doesn't support keyboard focus!");
};goog.ui.Container.prototype.getKeyHandler=function(){return this.keyHandler_||(this.keyHandler_=new goog.events.KeyHandler(this.getKeyEventTarget()))};goog.ui.Container.prototype.getRenderer=function(){return this.renderer_};goog.ui.Container.prototype.setRenderer=function(renderer){if(this.getElement())throw Error(goog.ui.Component.Error.ALREADY_RENDERED);this.renderer_=renderer};goog.ui.Container.prototype.createDom=function(){this.setElementInternal(this.renderer_.createDom(this))};
goog.ui.Container.prototype.getContentElement=function(){return this.renderer_.getContentElement(this.getElement())};goog.ui.Container.prototype.canDecorate=function(element){return this.renderer_.canDecorate(element)};goog.ui.Container.prototype.decorateInternal=function(element){this.setElementInternal(this.renderer_.decorate(this,element));if(element.style.display=="none")this.visible_=false};
goog.ui.Container.prototype.enterDocument=function(){goog.ui.Container.superClass_.enterDocument.call(this);this.forEachChild(function(child){if(child.isInDocument())this.registerChildId_(child)},this);var elem=this.getElement();this.renderer_.initializeDom(this);this.setVisible(this.visible_,true);this.getHandler().listen(this,goog.ui.Component.EventType.ENTER,this.handleEnterItem).listen(this,goog.ui.Component.EventType.HIGHLIGHT,this.handleHighlightItem).listen(this,goog.ui.Component.EventType.UNHIGHLIGHT,
this.handleUnHighlightItem).listen(this,goog.ui.Component.EventType.OPEN,this.handleOpenItem).listen(this,goog.ui.Component.EventType.CLOSE,this.handleCloseItem).listen(elem,goog.events.EventType.MOUSEDOWN,this.handleMouseDown).listen(goog.dom.getOwnerDocument(elem),goog.events.EventType.MOUSEUP,this.handleDocumentMouseUp).listen(elem,[goog.events.EventType.MOUSEDOWN,goog.events.EventType.MOUSEUP,goog.events.EventType.MOUSEOVER,goog.events.EventType.MOUSEOUT],this.handleChildMouseEvents);if(this.isFocusable())this.enableFocusHandling_(true)};
goog.ui.Container.prototype.enableFocusHandling_=function(enable){var handler=this.getHandler();var keyTarget=this.getKeyEventTarget();if(enable)handler.listen(keyTarget,goog.events.EventType.FOCUS,this.handleFocus).listen(keyTarget,goog.events.EventType.BLUR,this.handleBlur).listen(this.getKeyHandler(),goog.events.KeyHandler.EventType.KEY,this.handleKeyEvent);else handler.unlisten(keyTarget,goog.events.EventType.FOCUS,this.handleFocus).unlisten(keyTarget,goog.events.EventType.BLUR,this.handleBlur).unlisten(this.getKeyHandler(),
goog.events.KeyHandler.EventType.KEY,this.handleKeyEvent)};goog.ui.Container.prototype.exitDocument=function(){this.setHighlightedIndex(-1);if(this.openItem_)this.openItem_.setOpen(false);this.mouseButtonPressed_=false;goog.ui.Container.superClass_.exitDocument.call(this)};
goog.ui.Container.prototype.disposeInternal=function(){goog.ui.Container.superClass_.disposeInternal.call(this);if(this.keyHandler_){this.keyHandler_.dispose();this.keyHandler_=null}this.childElementIdMap_=null;this.openItem_=null;this.renderer_=null};goog.ui.Container.prototype.handleEnterItem=function(e){return true};
goog.ui.Container.prototype.handleHighlightItem=function(e){var index=this.indexOfChild(e.target);if(index>-1&&index!=this.highlightedIndex_){var item=this.getHighlighted();if(item)item.setHighlighted(false);this.highlightedIndex_=index;item=this.getHighlighted();if(this.isMouseButtonPressed())item.setActive(true);if(this.openItem_&&item!=this.openItem_)if(item.isSupportedState(goog.ui.Component.State.OPENED))item.setOpen(true);else this.openItem_.setOpen(false)}goog.dom.a11y.setState(this.getElement(),
goog.dom.a11y.State.ACTIVEDESCENDANT,e.target.getElement().id)};goog.ui.Container.prototype.handleUnHighlightItem=function(e){if(e.target==this.getHighlighted())this.highlightedIndex_=-1;goog.dom.a11y.setState(this.getElement(),goog.dom.a11y.State.ACTIVEDESCENDANT,"")};goog.ui.Container.prototype.handleOpenItem=function(e){var item=e.target;if(item&&item!=this.openItem_&&item.getParent()==this){if(this.openItem_)this.openItem_.setOpen(false);this.openItem_=item}};
goog.ui.Container.prototype.handleCloseItem=function(e){if(e.target==this.openItem_)this.openItem_=null};goog.ui.Container.prototype.handleMouseDown=function(e){if(this.enabled_)this.setMouseButtonPressed(true);var keyTarget=this.getKeyEventTarget();if(this.renderer_.hasTabIndex(keyTarget))keyTarget.focus();else e.preventDefault()};goog.ui.Container.prototype.handleDocumentMouseUp=function(e){this.setMouseButtonPressed(false)};
goog.ui.Container.prototype.handleChildMouseEvents=function(e){var control=this.getOwnerControl(e.target);if(control)switch(e.type){case goog.events.EventType.MOUSEDOWN:control.handleMouseDown(e);break;case goog.events.EventType.MOUSEUP:control.handleMouseUp(e);break;case goog.events.EventType.MOUSEOVER:control.handleMouseOver(e);break;case goog.events.EventType.MOUSEOUT:control.handleMouseOut(e);break}};
goog.ui.Container.prototype.getOwnerControl=function(node){if(this.childElementIdMap_){var elem=this.getElement();while(node&&node.parentNode&&node!=elem){var id=node.id;if(id in this.childElementIdMap_)return this.childElementIdMap_[id];node=node.parentNode}}return null};goog.ui.Container.prototype.handleFocus=function(e){};goog.ui.Container.prototype.handleBlur=function(e){this.setHighlightedIndex(-1);this.setMouseButtonPressed(false);if(this.openItem_)this.openItem_.setOpen(false)};
goog.ui.Container.prototype.handleKeyEvent=function(e){if(this.isEnabled()&&this.isVisible()&&this.getChildCount()!=0&&this.handleKeyEventInternal(e)){e.preventDefault();e.stopPropagation();return true}return false};
goog.ui.Container.prototype.handleKeyEventInternal=function(e){var highlighted=this.getHighlighted();if(highlighted&&typeof highlighted.handleKeyEvent=="function"&&highlighted.handleKeyEvent(e))return true;if(this.openItem_&&this.openItem_!=highlighted&&typeof this.openItem_.handleKeyEvent=="function"&&this.openItem_.handleKeyEvent(e))return true;switch(e.keyCode){case goog.events.KeyCodes.ESC:if(this.isFocusable())this.getKeyEventTarget().blur();else return false;break;case goog.events.KeyCodes.HOME:this.highlightFirst();
break;case goog.events.KeyCodes.END:this.highlightLast();break;case goog.events.KeyCodes.UP:if(this.orientation_==goog.ui.Container.Orientation.VERTICAL)this.highlightPrevious();else return false;break;case goog.events.KeyCodes.LEFT:if(this.orientation_==goog.ui.Container.Orientation.HORIZONTAL)if(this.isRightToLeft())this.highlightNext();else this.highlightPrevious();else return false;break;case goog.events.KeyCodes.DOWN:if(this.orientation_==goog.ui.Container.Orientation.VERTICAL)this.highlightNext();
else return false;break;case goog.events.KeyCodes.RIGHT:if(this.orientation_==goog.ui.Container.Orientation.HORIZONTAL)if(this.isRightToLeft())this.highlightPrevious();else this.highlightNext();else return false;break;default:return false}return true};goog.ui.Container.prototype.registerChildId_=function(child){var childElem=child.getElement();var id=childElem.id||(childElem.id=child.getId());if(!this.childElementIdMap_)this.childElementIdMap_={};this.childElementIdMap_[id]=child};
goog.ui.Container.prototype.addChild=function(child,opt_render){goog.ui.Container.superClass_.addChild.call(this,child,opt_render)};goog.ui.Container.prototype.getChild;goog.ui.Container.prototype.getChildAt;
goog.ui.Container.prototype.addChildAt=function(control,index,opt_render){control.setDispatchTransitionEvents(goog.ui.Component.State.HOVER,true);control.setDispatchTransitionEvents(goog.ui.Component.State.OPENED,true);if(this.isFocusable()||!this.isFocusableChildrenAllowed())control.setSupportedState(goog.ui.Component.State.FOCUSED,false);control.setHandleMouseEvents(false);goog.ui.Container.superClass_.addChildAt.call(this,control,index,opt_render);if(opt_render&&this.isInDocument())this.registerChildId_(control);
if(index<=this.highlightedIndex_)this.highlightedIndex_++};
goog.ui.Container.prototype.removeChild=function(control,opt_unrender){var index=this.indexOfChild(control);if(index!=-1)if(index==this.highlightedIndex_)control.setHighlighted(false);else if(index<this.highlightedIndex_)this.highlightedIndex_--;var childElem=control.getElement();if(childElem&&childElem.id)goog.object.remove(this.childElementIdMap_,childElem.id);control=goog.ui.Container.superClass_.removeChild.call(this,control,opt_unrender);control.setHandleMouseEvents(true);return control};
goog.ui.Container.prototype.getOrientation=function(){return this.orientation_};goog.ui.Container.prototype.setOrientation=function(orientation){if(this.getElement())throw Error(goog.ui.Component.Error.ALREADY_RENDERED);this.orientation_=orientation};goog.ui.Container.prototype.isVisible=function(){return this.visible_};
goog.ui.Container.prototype.setVisible=function(visible,opt_force){if(opt_force||this.visible_!=visible&&this.dispatchEvent(visible?goog.ui.Component.EventType.SHOW:goog.ui.Component.EventType.HIDE)){this.visible_=visible;var elem=this.getElement();if(elem){goog.style.showElement(elem,visible);if(this.isFocusable())this.renderer_.enableTabIndex(this.getKeyEventTarget(),this.enabled_&&this.visible_);if(this.visible_&&!opt_force)this.dispatchEvent(goog.ui.Container.EventType.AFTER_SHOW)}return true}return false};
goog.ui.Container.prototype.isEnabled=function(){return this.enabled_};
goog.ui.Container.prototype.setEnabled=function(enable){if(this.enabled_!=enable&&this.dispatchEvent(enable?goog.ui.Component.EventType.ENABLE:goog.ui.Component.EventType.DISABLE)){if(enable){this.enabled_=true;this.forEachChild(function(child){if(child.wasDisabled)delete child.wasDisabled;else child.setEnabled(true)})}else{this.forEachChild(function(child){if(child.isEnabled())child.setEnabled(false);else child.wasDisabled=true});this.enabled_=false;this.setMouseButtonPressed(false)}if(this.isFocusable())this.renderer_.enableTabIndex(this.getKeyEventTarget(),
enable&&this.visible_)}};goog.ui.Container.prototype.isFocusable=function(){return this.focusable_};goog.ui.Container.prototype.setFocusable=function(focusable){if(focusable!=this.focusable_&&this.isInDocument())this.enableFocusHandling_(focusable);this.focusable_=focusable;if(this.enabled_&&this.visible_)this.renderer_.enableTabIndex(this.getKeyEventTarget(),focusable)};goog.ui.Container.prototype.isFocusableChildrenAllowed=function(){return this.allowFocusableChildren_};
goog.ui.Container.prototype.setFocusableChildrenAllowed=function(focusable){this.allowFocusableChildren_=focusable};goog.ui.Container.prototype.getHighlightedIndex=function(){return this.highlightedIndex_};goog.ui.Container.prototype.setHighlightedIndex=function(index){var child=this.getChildAt(index);if(child)child.setHighlighted(true);else if(this.highlightedIndex_>-1)this.getHighlighted().setHighlighted(false)};goog.ui.Container.prototype.setHighlighted=function(item){this.setHighlightedIndex(this.indexOfChild(item))};
goog.ui.Container.prototype.getHighlighted=function(){return this.getChildAt(this.highlightedIndex_)};goog.ui.Container.prototype.highlightFirst=function(){this.highlightHelper(function(index,max){return(index+1)%max},this.getChildCount()-1)};goog.ui.Container.prototype.highlightLast=function(){this.highlightHelper(function(index,max){index--;return index<0?max-1:index},0)};goog.ui.Container.prototype.highlightNext=function(){this.highlightHelper(function(index,max){return(index+1)%max},this.highlightedIndex_)};
goog.ui.Container.prototype.highlightPrevious=function(){this.highlightHelper(function(index,max){index--;return index<0?max-1:index},this.highlightedIndex_)};
goog.ui.Container.prototype.highlightHelper=function(fn,startIndex){var curIndex=startIndex<0?this.indexOfChild(this.openItem_):startIndex;var numItems=this.getChildCount();curIndex=fn.call(this,curIndex,numItems);var visited=0;while(visited<=numItems){var control=this.getChildAt(curIndex);if(control&&this.canHighlightItem(control)){this.setHighlightedIndexFromKeyEvent(curIndex);return true}visited++;curIndex=fn.call(this,curIndex,numItems)}return false};
goog.ui.Container.prototype.canHighlightItem=function(item){return item.isVisible()&&item.isEnabled()&&item.isSupportedState(goog.ui.Component.State.HOVER)};goog.ui.Container.prototype.setHighlightedIndexFromKeyEvent=function(index){this.setHighlightedIndex(index)};goog.ui.Container.prototype.isMouseButtonPressed=function(){return this.mouseButtonPressed_};goog.ui.Container.prototype.setMouseButtonPressed=function(pressed){this.mouseButtonPressed_=pressed};goog.provide("goog.ui.MenuItemRenderer");goog.require("goog.dom");goog.require("goog.dom.a11y");goog.require("goog.dom.a11y.Role");goog.require("goog.dom.classes");goog.require("goog.ui.Component.State");goog.require("goog.ui.ControlContent");goog.require("goog.ui.ControlRenderer");goog.ui.MenuItemRenderer=function(){goog.ui.ControlRenderer.call(this);this.classNameCache_=[]};goog.inherits(goog.ui.MenuItemRenderer,goog.ui.ControlRenderer);goog.addSingletonGetter(goog.ui.MenuItemRenderer);
goog.ui.MenuItemRenderer.CSS_CLASS=goog.getCssName("goog-menuitem");goog.ui.MenuItemRenderer.CompositeCssClassIndex_={HOVER:0,CHECKBOX:1,CONTENT:2};
goog.ui.MenuItemRenderer.prototype.getCompositeCssClass_=function(index){var result=this.classNameCache_[index];if(!result){switch(index){case goog.ui.MenuItemRenderer.CompositeCssClassIndex_.HOVER:result=goog.getCssName(this.getStructuralCssClass(),"highlight");break;case goog.ui.MenuItemRenderer.CompositeCssClassIndex_.CHECKBOX:result=goog.getCssName(this.getStructuralCssClass(),"checkbox");break;case goog.ui.MenuItemRenderer.CompositeCssClassIndex_.CONTENT:result=goog.getCssName(this.getStructuralCssClass(),
"content");break}this.classNameCache_[index]=result}return result};goog.ui.MenuItemRenderer.prototype.getAriaRole=function(){return goog.dom.a11y.Role.MENU_ITEM};
goog.ui.MenuItemRenderer.prototype.createDom=function(item){var element=item.getDomHelper().createDom("div",this.getClassNames(item).join(" "),this.createContent(item.getContent(),item.getDomHelper()));this.setEnableCheckBoxStructure(item,element,item.isSupportedState(goog.ui.Component.State.SELECTED)||item.isSupportedState(goog.ui.Component.State.CHECKED));return element};goog.ui.MenuItemRenderer.prototype.getContentElement=function(element){return element&&element.firstChild};
goog.ui.MenuItemRenderer.prototype.decorate=function(item,element){if(!this.hasContentStructure(element))element.appendChild(this.createContent(element.childNodes,item.getDomHelper()));if(goog.dom.classes.has(element,goog.getCssName("goog-option"))){item.setCheckable(true);this.setCheckable(item,element,true)}return goog.ui.MenuItemRenderer.superClass_.decorate.call(this,item,element)};
goog.ui.MenuItemRenderer.prototype.setContent=function(element,content){var contentElement=this.getContentElement(element);var checkBoxElement=this.hasCheckBoxStructure(element)?contentElement.firstChild:null;goog.ui.MenuItemRenderer.superClass_.setContent.call(this,element,content);if(checkBoxElement&&!this.hasCheckBoxStructure(element))contentElement.insertBefore(checkBoxElement,contentElement.firstChild||null)};
goog.ui.MenuItemRenderer.prototype.hasContentStructure=function(element){var child=goog.dom.getFirstElementChild(element);var contentClassName=this.getCompositeCssClass_(goog.ui.MenuItemRenderer.CompositeCssClassIndex_.CONTENT);return!!child&&child.className.indexOf(contentClassName)!=-1};
goog.ui.MenuItemRenderer.prototype.createContent=function(content,dom){var contentClassName=this.getCompositeCssClass_(goog.ui.MenuItemRenderer.CompositeCssClassIndex_.CONTENT);return dom.createDom("div",contentClassName,content)};goog.ui.MenuItemRenderer.prototype.setSelectable=function(item,element,selectable){if(element){goog.dom.a11y.setRole(element,selectable?goog.dom.a11y.Role.MENU_ITEM_RADIO:this.getAriaRole());this.setEnableCheckBoxStructure(item,element,selectable)}};
goog.ui.MenuItemRenderer.prototype.setCheckable=function(item,element,checkable){if(element){goog.dom.a11y.setRole(element,checkable?goog.dom.a11y.Role.MENU_ITEM_CHECKBOX:this.getAriaRole());this.setEnableCheckBoxStructure(item,element,checkable)}};
goog.ui.MenuItemRenderer.prototype.hasCheckBoxStructure=function(element){var contentElement=this.getContentElement(element);if(contentElement){var child=contentElement.firstChild;var checkboxClassName=this.getCompositeCssClass_(goog.ui.MenuItemRenderer.CompositeCssClassIndex_.CHECKBOX);return!!child&&!!child.className&&child.className.indexOf(checkboxClassName)!=-1}return false};
goog.ui.MenuItemRenderer.prototype.setEnableCheckBoxStructure=function(item,element,enable){if(enable!=this.hasCheckBoxStructure(element)){goog.dom.classes.enable(element,goog.getCssName("goog-option"),enable);var contentElement=this.getContentElement(element);if(enable){var checkboxClassName=this.getCompositeCssClass_(goog.ui.MenuItemRenderer.CompositeCssClassIndex_.CHECKBOX);contentElement.insertBefore(item.getDomHelper().createDom("div",checkboxClassName),contentElement.firstChild||null)}else contentElement.removeChild(contentElement.firstChild)}};
goog.ui.MenuItemRenderer.prototype.getClassForState=function(state){switch(state){case goog.ui.Component.State.HOVER:return this.getCompositeCssClass_(goog.ui.MenuItemRenderer.CompositeCssClassIndex_.HOVER);case goog.ui.Component.State.CHECKED:case goog.ui.Component.State.SELECTED:return goog.getCssName("goog-option-selected");default:return goog.ui.MenuItemRenderer.superClass_.getClassForState.call(this,state)}};
goog.ui.MenuItemRenderer.prototype.getStateFromClass=function(className){var hoverClassName=this.getCompositeCssClass_(goog.ui.MenuItemRenderer.CompositeCssClassIndex_.HOVER);switch(className){case goog.getCssName("goog-option-selected"):return goog.ui.Component.State.CHECKED;case hoverClassName:return goog.ui.Component.State.HOVER;default:return goog.ui.MenuItemRenderer.superClass_.getStateFromClass.call(this,className)}};goog.ui.MenuItemRenderer.prototype.getCssClass=function(){return goog.ui.MenuItemRenderer.CSS_CLASS};goog.provide("goog.ui.MenuItem");goog.require("goog.ui.Component.State");goog.require("goog.ui.Control");goog.require("goog.ui.ControlContent");goog.require("goog.ui.MenuItemRenderer");goog.require("goog.ui.registry");goog.ui.MenuItem=function(content,opt_model,opt_domHelper,opt_renderer){goog.ui.Control.call(this,content,opt_renderer||goog.ui.MenuItemRenderer.getInstance(),opt_domHelper);this.setValue(opt_model)};goog.inherits(goog.ui.MenuItem,goog.ui.Control);
goog.ui.MenuItem.prototype.getValue=function(){var model=this.getModel();return model!=null?model:this.getCaption()};goog.ui.MenuItem.prototype.setValue=function(value){this.setModel(value)};goog.ui.MenuItem.prototype.setSelectable=function(selectable){this.setSupportedState(goog.ui.Component.State.SELECTED,selectable);if(this.isChecked()&&!selectable)this.setChecked(false);var element=this.getElement();if(element)this.renderer_.setSelectable(this,element,selectable)};
goog.ui.MenuItem.prototype.setCheckable=function(checkable){this.setSupportedState(goog.ui.Component.State.CHECKED,checkable);var element=this.getElement();if(element)this.renderer_.setCheckable(this,element,checkable)};goog.ui.registry.setDecoratorByClassName(goog.ui.MenuItemRenderer.CSS_CLASS,function(){return new goog.ui.MenuItem(null)});goog.provide("goog.ui.Option");goog.require("goog.ui.Component.EventType");goog.require("goog.ui.ControlContent");goog.require("goog.ui.MenuItem");goog.require("goog.ui.registry");goog.ui.Option=function(content,opt_model,opt_domHelper){goog.ui.MenuItem.call(this,content,opt_model,opt_domHelper);this.setSelectable(true)};goog.inherits(goog.ui.Option,goog.ui.MenuItem);goog.ui.Option.prototype.performActionInternal=function(e){return this.dispatchEvent(goog.ui.Component.EventType.ACTION)};
goog.ui.registry.setDecoratorByClassName(goog.getCssName("goog-option"),function(){return new goog.ui.Option(null)});goog.provide("goog.ui.INLINE_BLOCK_CLASSNAME");goog.ui.INLINE_BLOCK_CLASSNAME=goog.getCssName("goog-inline-block");goog.provide("goog.ui.ToolbarSeparatorRenderer");goog.require("goog.dom.classes");goog.require("goog.ui.INLINE_BLOCK_CLASSNAME");goog.require("goog.ui.MenuSeparatorRenderer");goog.ui.ToolbarSeparatorRenderer=function(){goog.ui.MenuSeparatorRenderer.call(this)};goog.inherits(goog.ui.ToolbarSeparatorRenderer,goog.ui.MenuSeparatorRenderer);goog.addSingletonGetter(goog.ui.ToolbarSeparatorRenderer);goog.ui.ToolbarSeparatorRenderer.CSS_CLASS=goog.getCssName("goog-toolbar-separator");
goog.ui.ToolbarSeparatorRenderer.prototype.createDom=function(separator){return separator.getDomHelper().createDom("div",this.getCssClass()+" "+goog.ui.INLINE_BLOCK_CLASSNAME,"\u00a0")};goog.ui.ToolbarSeparatorRenderer.prototype.decorate=function(separator,element){element=goog.ui.ToolbarSeparatorRenderer.superClass_.decorate.call(this,separator,element);goog.dom.classes.add(element,goog.ui.INLINE_BLOCK_CLASSNAME);return element};goog.ui.ToolbarSeparatorRenderer.prototype.getCssClass=function(){return goog.ui.ToolbarSeparatorRenderer.CSS_CLASS};goog.provide("goog.ui.ToolbarRenderer");goog.require("goog.dom.a11y.Role");goog.require("goog.ui.Container.Orientation");goog.require("goog.ui.ContainerRenderer");goog.require("goog.ui.Separator");goog.require("goog.ui.ToolbarSeparatorRenderer");goog.ui.ToolbarRenderer=function(){goog.ui.ContainerRenderer.call(this)};goog.inherits(goog.ui.ToolbarRenderer,goog.ui.ContainerRenderer);goog.addSingletonGetter(goog.ui.ToolbarRenderer);goog.ui.ToolbarRenderer.CSS_CLASS=goog.getCssName("goog-toolbar");
goog.ui.ToolbarRenderer.prototype.getAriaRole=function(){return goog.dom.a11y.Role.TOOLBAR};goog.ui.ToolbarRenderer.prototype.getDecoratorForChild=function(element){return element.tagName=="HR"?new goog.ui.Separator(goog.ui.ToolbarSeparatorRenderer.getInstance()):goog.ui.ToolbarRenderer.superClass_.getDecoratorForChild.call(this,element)};goog.ui.ToolbarRenderer.prototype.getCssClass=function(){return goog.ui.ToolbarRenderer.CSS_CLASS};goog.ui.ToolbarRenderer.prototype.getDefaultOrientation=function(){return goog.ui.Container.Orientation.HORIZONTAL};goog.provide("goog.ui.Toolbar");goog.require("goog.ui.Container");goog.require("goog.ui.ToolbarRenderer");goog.ui.Toolbar=function(opt_renderer,opt_orientation,opt_domHelper){goog.ui.Container.call(this,opt_orientation,opt_renderer||goog.ui.ToolbarRenderer.getInstance(),opt_domHelper)};goog.inherits(goog.ui.Toolbar,goog.ui.Container);goog.provide("goog.ui.ButtonRenderer");goog.require("goog.dom.a11y");goog.require("goog.dom.a11y.Role");goog.require("goog.dom.a11y.State");goog.require("goog.ui.Component.State");goog.require("goog.ui.ControlRenderer");goog.ui.ButtonRenderer=function(){goog.ui.ControlRenderer.call(this)};goog.inherits(goog.ui.ButtonRenderer,goog.ui.ControlRenderer);goog.addSingletonGetter(goog.ui.ButtonRenderer);goog.ui.ButtonRenderer.CSS_CLASS=goog.getCssName("goog-button");
goog.ui.ButtonRenderer.prototype.getAriaRole=function(){return goog.dom.a11y.Role.BUTTON};goog.ui.ButtonRenderer.prototype.updateAriaState=function(element,state,enable){if(goog.userAgent.GECKO)if(state==goog.ui.Component.State.CHECKED)goog.dom.a11y.setState(element,goog.dom.a11y.State.PRESSED,enable);else goog.ui.ButtonRenderer.superClass_.updateAriaState.call(this,element,state,enable)};
goog.ui.ButtonRenderer.prototype.createDom=function(button){var element=goog.ui.ButtonRenderer.superClass_.createDom.call(this,button);var tooltip=button.getTooltip();if(tooltip)this.setTooltip(element,tooltip);var value=button.getValue();if(value)this.setValue(element,value);if(button.isSupportedState(goog.ui.Component.State.CHECKED))this.updateAriaState(element,goog.ui.Component.State.CHECKED,false);return element};
goog.ui.ButtonRenderer.prototype.decorate=function(button,element){element=goog.ui.ButtonRenderer.superClass_.decorate.call(this,button,element);button.setValueInternal(this.getValue(element));button.setTooltipInternal(this.getTooltip(element));if(button.isSupportedState(goog.ui.Component.State.CHECKED))this.updateAriaState(element,goog.ui.Component.State.CHECKED,false);return element};goog.ui.ButtonRenderer.prototype.getValue=goog.nullFunction;goog.ui.ButtonRenderer.prototype.setValue=goog.nullFunction;
goog.ui.ButtonRenderer.prototype.getTooltip=function(element){return element.title};goog.ui.ButtonRenderer.prototype.setTooltip=function(element,tooltip){if(element)element.title=tooltip||""};
goog.ui.ButtonRenderer.prototype.setCollapsed=function(button,sides){var isRtl=button.isRightToLeft();var collapseLeftClassName=goog.getCssName(this.getStructuralCssClass(),"collapse-left");var collapseRightClassName=goog.getCssName(this.getStructuralCssClass(),"collapse-right");button.enableClassName(isRtl?collapseRightClassName:collapseLeftClassName,!!(sides&goog.ui.Button.Side.START));button.enableClassName(isRtl?collapseLeftClassName:collapseRightClassName,!!(sides&goog.ui.Button.Side.END))};
goog.ui.ButtonRenderer.prototype.getCssClass=function(){return goog.ui.ButtonRenderer.CSS_CLASS};goog.provide("goog.ui.NativeButtonRenderer");goog.require("goog.dom.classes");goog.require("goog.events.EventType");goog.require("goog.ui.ButtonRenderer");goog.require("goog.ui.Component.State");goog.ui.NativeButtonRenderer=function(){goog.ui.ButtonRenderer.call(this)};goog.inherits(goog.ui.NativeButtonRenderer,goog.ui.ButtonRenderer);goog.addSingletonGetter(goog.ui.NativeButtonRenderer);goog.ui.NativeButtonRenderer.prototype.getAriaRole=function(){return undefined};
goog.ui.NativeButtonRenderer.prototype.createDom=function(button){this.setUpNativeButton_(button);return button.getDomHelper().createDom("button",{"class":this.getClassNames(button).join(" "),disabled:!button.isEnabled(),title:button.getTooltip()||"",value:button.getValue()||""},button.getCaption()||"")};goog.ui.NativeButtonRenderer.prototype.canDecorate=function(element){return element.tagName=="BUTTON"||element.tagName=="INPUT"&&(element.type=="button"||element.type=="submit"||element.type=="reset")};
goog.ui.NativeButtonRenderer.prototype.decorate=function(button,element){this.setUpNativeButton_(button);if(element.disabled)goog.dom.classes.add(element,this.getClassForState(goog.ui.Component.State.DISABLED));return goog.ui.NativeButtonRenderer.superClass_.decorate.call(this,button,element)};goog.ui.NativeButtonRenderer.prototype.initializeDom=function(button){button.getHandler().listen(button.getElement(),goog.events.EventType.CLICK,button.performActionInternal)};
goog.ui.NativeButtonRenderer.prototype.setAllowTextSelection=goog.nullFunction;goog.ui.NativeButtonRenderer.prototype.setRightToLeft=goog.nullFunction;goog.ui.NativeButtonRenderer.prototype.isFocusable=function(button){return button.isEnabled()};goog.ui.NativeButtonRenderer.prototype.setFocusable=goog.nullFunction;
goog.ui.NativeButtonRenderer.prototype.setState=function(button,state,enable){goog.ui.NativeButtonRenderer.superClass_.setState.call(this,button,state,enable);var element=button.getElement();if(element&&state==goog.ui.Component.State.DISABLED)element.disabled=enable};goog.ui.NativeButtonRenderer.prototype.getValue=function(element){return element.value};goog.ui.NativeButtonRenderer.prototype.setValue=function(element,value){if(element)element.value=value};
goog.ui.NativeButtonRenderer.prototype.updateAriaState=goog.nullFunction;goog.ui.NativeButtonRenderer.prototype.setUpNativeButton_=function(button){button.setHandleMouseEvents(false);button.setAutoStates(goog.ui.Component.State.ALL,false);button.setSupportedState(goog.ui.Component.State.FOCUSED,false)};goog.provide("goog.ui.Button");goog.provide("goog.ui.Button.Side");goog.require("goog.events.KeyCodes");goog.require("goog.ui.ButtonRenderer");goog.require("goog.ui.Control");goog.require("goog.ui.ControlContent");goog.require("goog.ui.NativeButtonRenderer");goog.ui.Button=function(content,opt_renderer,opt_domHelper){goog.ui.Control.call(this,content,opt_renderer||goog.ui.NativeButtonRenderer.getInstance(),opt_domHelper)};goog.inherits(goog.ui.Button,goog.ui.Control);
goog.ui.Button.Side={NONE:0,START:1,END:2,BOTH:3};goog.ui.Button.prototype.value_;goog.ui.Button.prototype.tooltip_;goog.ui.Button.prototype.getValue=function(){return this.value_};goog.ui.Button.prototype.setValue=function(value){this.value_=value;this.getRenderer().setValue(this.getElement(),value)};goog.ui.Button.prototype.setValueInternal=function(value){this.value_=value};goog.ui.Button.prototype.getTooltip=function(){return this.tooltip_};
goog.ui.Button.prototype.setTooltip=function(tooltip){this.tooltip_=tooltip;this.getRenderer().setTooltip(this.getElement(),tooltip)};goog.ui.Button.prototype.setTooltipInternal=function(tooltip){this.tooltip_=tooltip};goog.ui.Button.prototype.setCollapsed=function(sides){this.getRenderer().setCollapsed(this,sides)};goog.ui.Button.prototype.disposeInternal=function(){goog.ui.Button.superClass_.disposeInternal.call(this);delete this.value_;delete this.tooltip_};
goog.ui.Button.prototype.enterDocument=function(){goog.ui.Button.superClass_.enterDocument.call(this);if(this.isSupportedState(goog.ui.Component.State.FOCUSED)){var keyTarget=this.getKeyEventTarget();if(keyTarget)this.getHandler().listen(keyTarget,goog.events.EventType.KEYUP,this.handleKeyEventInternal)}};
goog.ui.Button.prototype.handleKeyEventInternal=function(e){if(e.keyCode==goog.events.KeyCodes.ENTER&&e.type==goog.events.KeyHandler.EventType.KEY||e.keyCode==goog.events.KeyCodes.SPACE&&e.type==goog.events.EventType.KEYUP)return this.performActionInternal(e);return e.keyCode==goog.events.KeyCodes.SPACE};goog.ui.registry.setDecoratorByClassName(goog.ui.ButtonRenderer.CSS_CLASS,function(){return new goog.ui.Button(null)});goog.provide("goog.ui.CustomButtonRenderer");goog.require("goog.dom");goog.require("goog.dom.classes");goog.require("goog.string");goog.require("goog.ui.ButtonRenderer");goog.require("goog.ui.ControlContent");goog.require("goog.ui.INLINE_BLOCK_CLASSNAME");goog.ui.CustomButtonRenderer=function(){goog.ui.ButtonRenderer.call(this)};goog.inherits(goog.ui.CustomButtonRenderer,goog.ui.ButtonRenderer);goog.addSingletonGetter(goog.ui.CustomButtonRenderer);goog.ui.CustomButtonRenderer.CSS_CLASS=goog.getCssName("goog-custom-button");
goog.ui.CustomButtonRenderer.prototype.createDom=function(button){var classNames=this.getClassNames(button);var attributes={"class":goog.ui.INLINE_BLOCK_CLASSNAME+" "+classNames.join(" "),title:button.getTooltip()||""};return button.getDomHelper().createDom("div",attributes,this.createButton(button.getContent(),button.getDomHelper()))};goog.ui.CustomButtonRenderer.prototype.getContentElement=function(element){return element&&element.firstChild.firstChild};
goog.ui.CustomButtonRenderer.prototype.createButton=function(content,dom){return dom.createDom("div",goog.ui.INLINE_BLOCK_CLASSNAME+" "+goog.getCssName(this.getCssClass(),"outer-box"),dom.createDom("div",goog.ui.INLINE_BLOCK_CLASSNAME+" "+goog.getCssName(this.getCssClass(),"inner-box"),content))};goog.ui.CustomButtonRenderer.prototype.canDecorate=function(element){return element.tagName=="DIV"};
goog.ui.CustomButtonRenderer.prototype.hasBoxStructure=function(button,element){var outer=button.getDomHelper().getFirstElementChild(element);if(outer&&outer.className.indexOf(goog.getCssName(this.getCssClass(),"outer-box"))!=-1){var inner=button.getDomHelper().getFirstElementChild(outer);if(inner&&inner.className.indexOf(goog.getCssName(this.getCssClass(),"inner-box"))!=-1)return true}return false};
goog.ui.CustomButtonRenderer.prototype.decorate=function(button,element){goog.ui.CustomButtonRenderer.trimTextNodes_(element,true);goog.ui.CustomButtonRenderer.trimTextNodes_(element,false);if(!this.hasBoxStructure(button,element))element.appendChild(this.createButton(element.childNodes,button.getDomHelper()));goog.dom.classes.add(element,goog.ui.INLINE_BLOCK_CLASSNAME,this.getCssClass());return goog.ui.CustomButtonRenderer.superClass_.decorate.call(this,button,element)};
goog.ui.CustomButtonRenderer.prototype.getCssClass=function(){return goog.ui.CustomButtonRenderer.CSS_CLASS};
goog.ui.CustomButtonRenderer.trimTextNodes_=function(element,fromStart){if(element){var node=fromStart?element.firstChild:element.lastChild,next;while(node&&node.parentNode==element){next=fromStart?node.nextSibling:node.previousSibling;if(node.nodeType==goog.dom.NodeType.TEXT){var text=node.nodeValue;if(goog.string.trim(text)=="")element.removeChild(node);else{node.nodeValue=fromStart?goog.string.trimLeft(text):goog.string.trimRight(text);break}}else break;node=next}}};goog.provide("goog.ui.ToolbarButtonRenderer");goog.require("goog.ui.CustomButtonRenderer");goog.ui.ToolbarButtonRenderer=function(){goog.ui.CustomButtonRenderer.call(this)};goog.inherits(goog.ui.ToolbarButtonRenderer,goog.ui.CustomButtonRenderer);goog.addSingletonGetter(goog.ui.ToolbarButtonRenderer);goog.ui.ToolbarButtonRenderer.CSS_CLASS=goog.getCssName("goog-toolbar-button");goog.ui.ToolbarButtonRenderer.prototype.getCssClass=function(){return goog.ui.ToolbarButtonRenderer.CSS_CLASS};goog.provide("goog.ui.ToolbarButton");goog.require("goog.ui.Button");goog.require("goog.ui.ControlContent");goog.require("goog.ui.ToolbarButtonRenderer");goog.require("goog.ui.registry");goog.ui.ToolbarButton=function(content,opt_renderer,opt_domHelper){goog.ui.Button.call(this,content,opt_renderer||goog.ui.ToolbarButtonRenderer.getInstance(),opt_domHelper)};goog.inherits(goog.ui.ToolbarButton,goog.ui.Button);goog.ui.registry.setDecoratorByClassName(goog.ui.ToolbarButtonRenderer.CSS_CLASS,function(){return new goog.ui.ToolbarButton(null)});goog.provide("goog.color.names");
goog.color.names={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",
darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",
ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",
lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370d8",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",
moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#d87093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",
seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"};goog.provide("goog.color");goog.require("goog.color.names");goog.require("goog.math");
goog.color.parse=function(str){var result={};str=String(str);var maybeHex=goog.color.prependPoundIfNecessary_(str);if(goog.color.isValidHexColor_(maybeHex)){result.hex=goog.color.normalizeHex(maybeHex);result.type="hex";return result}else{var rgb=goog.color.isValidRgbColor_(str);if(rgb.length){result.hex=goog.color.rgbArrayToHex(rgb);result.type="rgb";return result}else if(goog.color.names){var hex=goog.color.names[str.toLowerCase()];if(hex){result.hex=hex;result.type="named";return result}}}throw Error(str+
" is not a valid color string");};goog.color.parseRgb=function(str){var rgb=goog.color.isValidRgbColor_(str);if(!rgb.length)throw Error(str+" is not a valid RGB color");return rgb};goog.color.hexToRgbStyle=function(hexColor){return goog.color.rgbStyle_(goog.color.hexToRgb(hexColor))};goog.color.hexTripletRe_=/#(.)(.)(.)/;
goog.color.normalizeHex=function(hexColor){if(!goog.color.isValidHexColor_(hexColor))throw Error("'"+hexColor+"' is not a valid hex color");if(hexColor.length==4)hexColor=hexColor.replace(goog.color.hexTripletRe_,"#$1$1$2$2$3$3");return hexColor.toLowerCase()};goog.color.hexToRgb=function(hexColor){hexColor=goog.color.normalizeHex(hexColor);var r=parseInt(hexColor.substr(1,2),16);var g=parseInt(hexColor.substr(3,2),16);var b=parseInt(hexColor.substr(5,2),16);return[r,g,b]};
goog.color.rgbToHex=function(r,g,b){r=Number(r);g=Number(g);b=Number(b);if(isNaN(r)||r<0||r>255||isNaN(g)||g<0||g>255||isNaN(b)||b<0||b>255)throw Error('"('+r+","+g+","+b+'") is not a valid RGB color');var hexR=goog.color.prependZeroIfNecessary_(r.toString(16));var hexG=goog.color.prependZeroIfNecessary_(g.toString(16));var hexB=goog.color.prependZeroIfNecessary_(b.toString(16));return"#"+hexR+hexG+hexB};goog.color.rgbArrayToHex=function(rgb){return goog.color.rgbToHex(rgb[0],rgb[1],rgb[2])};
goog.color.rgbToHsl=function(r,g,b){var normR=r/255;var normG=g/255;var normB=b/255;var max=Math.max(normR,normG,normB);var min=Math.min(normR,normG,normB);var h=0;var s=0;var l=0.5*(max+min);if(max!=min){if(max==normR)h=60*(normG-normB)/(max-min);else if(max==normG)h=60*(normB-normR)/(max-min)+120;else if(max==normB)h=60*(normR-normG)/(max-min)+240;if(0<l&&l<=0.5)s=(max-min)/(2*l);else s=(max-min)/(2-2*l)}return[Math.round(h+360)%360,s,l]};
goog.color.rgbArrayToHsl=function(rgb){return goog.color.rgbToHsl(rgb[0],rgb[1],rgb[2])};goog.color.hueToRgb_=function(v1,v2,vH){if(vH<0)vH+=1;else if(vH>1)vH-=1;if(6*vH<1)return v1+(v2-v1)*6*vH;else if(2*vH<1)return v2;else if(3*vH<2)return v1+(v2-v1)*(2/3-vH)*6;return v1};
goog.color.hslToRgb=function(h,s,l){var r=0;var g=0;var b=0;var normH=h/360;if(s==0)r=g=b=l*255;else{var temp1=0;var temp2=0;if(l<0.5)temp2=l*(1+s);else temp2=l+s-s*l;temp1=2*l-temp2;r=255*goog.color.hueToRgb_(temp1,temp2,normH+1/3);g=255*goog.color.hueToRgb_(temp1,temp2,normH);b=255*goog.color.hueToRgb_(temp1,temp2,normH-1/3)}return[Math.round(r),Math.round(g),Math.round(b)]};goog.color.hslArrayToRgb=function(hsl){return goog.color.hslToRgb(hsl[0],hsl[1],hsl[2])};goog.color.validHexColorRe_=/^#(?:[0-9a-f]{3}){1,2}$/i;
goog.color.isValidHexColor_=function(str){return goog.color.validHexColorRe_.test(str)};goog.color.normalizedHexColorRe_=/^#[0-9a-f]{6}$/;goog.color.isNormalizedHexColor_=function(str){return goog.color.normalizedHexColorRe_.test(str)};goog.color.rgbColorRe_=/^(?:rgb)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2})\)$/i;
goog.color.isValidRgbColor_=function(str){var regExpResultArray=str.match(goog.color.rgbColorRe_);if(regExpResultArray){var r=Number(regExpResultArray[1]);var g=Number(regExpResultArray[2]);var b=Number(regExpResultArray[3]);if(r>=0&&r<=255&&g>=0&&g<=255&&b>=0&&b<=255)return[r,g,b]}return[]};goog.color.prependZeroIfNecessary_=function(hex){return hex.length==1?"0"+hex:hex};goog.color.prependPoundIfNecessary_=function(str){return str.charAt(0)=="#"?str:"#"+str};
goog.color.rgbStyle_=function(rgb){return"rgb("+rgb.join(",")+")"};
goog.color.hsvToRgb=function(h,s,brightness){var red=0;var green=0;var blue=0;if(s==0){red=brightness;green=brightness;blue=brightness}else{var sextant=Math.floor(h/60);var remainder=h/60-sextant;var val1=brightness*(1-s);var val2=brightness*(1-s*remainder);var val3=brightness*(1-s*(1-remainder));switch(sextant){case 1:red=val2;green=brightness;blue=val1;break;case 2:red=val1;green=brightness;blue=val3;break;case 3:red=val1;green=val2;blue=brightness;break;case 4:red=val3;green=val1;blue=brightness;
break;case 5:red=brightness;green=val1;blue=val2;break;case 6:case 0:red=brightness;green=val3;blue=val1;break}}return[Math.floor(red),Math.floor(green),Math.floor(blue)]};
goog.color.rgbToHsv=function(red,green,blue){var max=Math.max(Math.max(red,green),blue);var min=Math.min(Math.min(red,green),blue);var hue;var saturation;var value=max;if(min==max){hue=0;saturation=0}else{var delta=max-min;saturation=delta/max;if(red==max)hue=(green-blue)/delta;else if(green==max)hue=2+(blue-red)/delta;else hue=4+(red-green)/delta;hue*=60;if(hue<0)hue+=360;if(hue>360)hue-=360}return[hue,saturation,value]};
goog.color.rgbArrayToHsv=function(rgb){return goog.color.rgbToHsv(rgb[0],rgb[1],rgb[2])};goog.color.hsvArrayToRgb=function(hsv){return goog.color.hsvToRgb(hsv[0],hsv[1],hsv[2])};goog.color.hexToHsl=function(hex){var rgb=goog.color.hexToRgb(hex);return goog.color.rgbToHsl(rgb[0],rgb[1],rgb[2])};goog.color.hslToHex=function(h,s,l){return goog.color.rgbArrayToHex(goog.color.hslToRgb(h,s,l))};goog.color.hslArrayToHex=function(hsl){return goog.color.rgbArrayToHex(goog.color.hslToRgb(hsl[0],hsl[1],hsl[2]))};
goog.color.hexToHsv=function(hex){return goog.color.rgbArrayToHsv(goog.color.hexToRgb(hex))};goog.color.hsvToHex=function(h,s,v){return goog.color.rgbArrayToHex(goog.color.hsvToRgb(h,s,v))};goog.color.hsvArrayToHex=function(hsv){return goog.color.hsvToHex(hsv[0],hsv[1],hsv[2])};
goog.color.hslDistance=function(hsl1,hsl2){var sl1,sl2;if(hsl1[2]<=0.5)sl1=hsl1[1]*hsl1[2];else sl1=hsl1[1]*(1-hsl1[2]);if(hsl2[2]<=0.5)sl2=hsl2[1]*hsl2[2];else sl2=hsl2[1]*(1-hsl2[2]);var h1=hsl1[0]/360;var h2=hsl2[0]/360;var dh=(h1-h2)*2*Math.PI;return(hsl1[2]-hsl2[2])*(hsl1[2]-hsl2[2])+sl1*sl1+sl2*sl2-2*sl1*sl2*Math.cos(dh)};
goog.color.blend=function(rgb1,rgb2,factor){factor=goog.math.clamp(factor,0,1);return[Math.round(factor*rgb1[0]+(1-factor)*rgb2[0]),Math.round(factor*rgb1[1]+(1-factor)*rgb2[1]),Math.round(factor*rgb1[2]+(1-factor)*rgb2[2])]};goog.color.darken=function(rgb,factor){var black=[0,0,0];return goog.color.blend(black,rgb,factor)};goog.color.lighten=function(rgb,factor){var white=[255,255,255];return goog.color.blend(white,rgb,factor)};
goog.color.highContrast=function(prime,suggestions){var suggestionsWithDiff=[];for(var i=0;i<suggestions.length;i++)suggestionsWithDiff.push({color:suggestions[i],diff:goog.color.yiqBrightnessDiff_(suggestions[i],prime)+goog.color.colorDiff_(suggestions[i],prime)});suggestionsWithDiff.sort(function(a,b){return b.diff-a.diff});return suggestionsWithDiff[0].color};goog.color.yiqBrightness_=function(rgb){return Math.round((rgb[0]*299+rgb[1]*587+rgb[2]*114)/1E3)};
goog.color.yiqBrightnessDiff_=function(rgb1,rgb2){return Math.abs(goog.color.yiqBrightness_(rgb1)-goog.color.yiqBrightness_(rgb2))};goog.color.colorDiff_=function(rgb1,rgb2){return Math.abs(rgb1[0]-rgb2[0])+Math.abs(rgb1[1]-rgb2[1])+Math.abs(rgb1[2]-rgb2[2])};goog.provide("goog.ui.MenuRenderer");goog.require("goog.dom");goog.require("goog.dom.a11y");goog.require("goog.dom.a11y.Role");goog.require("goog.dom.a11y.State");goog.require("goog.ui.ContainerRenderer");goog.require("goog.ui.Separator");goog.ui.MenuRenderer=function(){goog.ui.ContainerRenderer.call(this)};goog.inherits(goog.ui.MenuRenderer,goog.ui.ContainerRenderer);goog.addSingletonGetter(goog.ui.MenuRenderer);goog.ui.MenuRenderer.CSS_CLASS=goog.getCssName("goog-menu");
goog.ui.MenuRenderer.prototype.getAriaRole=function(){return goog.dom.a11y.Role.MENU};goog.ui.MenuRenderer.prototype.canDecorate=function(element){return element.tagName=="UL"||goog.ui.MenuRenderer.superClass_.canDecorate.call(this,element)};goog.ui.MenuRenderer.prototype.getDecoratorForChild=function(element){return element.tagName=="HR"?new goog.ui.Separator:goog.ui.MenuRenderer.superClass_.getDecoratorForChild.call(this,element)};
goog.ui.MenuRenderer.prototype.containsElement=function(menu,element){return goog.dom.contains(menu.getElement(),element)};goog.ui.MenuRenderer.prototype.getCssClass=function(){return goog.ui.MenuRenderer.CSS_CLASS};goog.ui.MenuRenderer.prototype.initializeDom=function(container){goog.ui.MenuRenderer.superClass_.initializeDom.call(this,container);var element=container.getElement();goog.dom.a11y.setState(element,goog.dom.a11y.State.HASPOPUP,"true")};goog.provide("goog.ui.MenuSeparator");goog.require("goog.ui.MenuSeparatorRenderer");goog.require("goog.ui.Separator");goog.require("goog.ui.registry");goog.ui.MenuSeparator=function(opt_domHelper){goog.ui.Separator.call(this,goog.ui.MenuSeparatorRenderer.getInstance(),opt_domHelper)};goog.inherits(goog.ui.MenuSeparator,goog.ui.Separator);goog.ui.registry.setDecoratorByClassName(goog.ui.MenuSeparatorRenderer.CSS_CLASS,function(){return new goog.ui.Separator});goog.provide("goog.ui.Menu");goog.provide("goog.ui.Menu.EventType");goog.require("goog.string");goog.require("goog.style");goog.require("goog.ui.Component.EventType");goog.require("goog.ui.Component.State");goog.require("goog.ui.Container");goog.require("goog.ui.Container.Orientation");goog.require("goog.ui.MenuItem");goog.require("goog.ui.MenuRenderer");goog.require("goog.ui.MenuSeparator");
goog.ui.Menu=function(opt_domHelper,opt_renderer){goog.ui.Container.call(this,goog.ui.Container.Orientation.VERTICAL,opt_renderer||goog.ui.MenuRenderer.getInstance(),opt_domHelper);this.setFocusable(false)};goog.inherits(goog.ui.Menu,goog.ui.Container);goog.ui.Menu.EventType={BEFORE_SHOW:goog.ui.Component.EventType.BEFORE_SHOW,SHOW:goog.ui.Component.EventType.SHOW,BEFORE_HIDE:goog.ui.Component.EventType.HIDE,HIDE:goog.ui.Component.EventType.HIDE};goog.ui.Menu.CSS_CLASS=goog.ui.MenuRenderer.CSS_CLASS;
goog.ui.Menu.prototype.allowAutoFocus_=true;goog.ui.Menu.prototype.allowHighlightDisabled_=false;goog.ui.Menu.prototype.getCssClass=function(){return this.getRenderer().getCssClass()};goog.ui.Menu.prototype.containsElement=function(element){if(this.getRenderer().containsElement(this,element))return true;for(var i=0,count=this.getChildCount();i<count;i++){var child=this.getChildAt(i);if(typeof child.containsElement=="function"&&child.containsElement(element))return true}return false};
goog.ui.Menu.prototype.addItem=function(item){this.addChild(item,true)};goog.ui.Menu.prototype.addItemAt=function(item,n){this.addChildAt(item,n,true)};goog.ui.Menu.prototype.removeItem=function(item){var removedChild=this.removeChild(item,true);if(removedChild)removedChild.dispose()};goog.ui.Menu.prototype.removeItemAt=function(n){var removedChild=this.removeChildAt(n,true);if(removedChild)removedChild.dispose()};goog.ui.Menu.prototype.getItemAt=function(n){return this.getChildAt(n)};
goog.ui.Menu.prototype.getItemCount=function(){return this.getChildCount()};goog.ui.Menu.prototype.getItems=function(){return this.children_||[]};goog.ui.Menu.prototype.setPosition=function(x,opt_y){var visible=this.isVisible();if(!visible)goog.style.showElement(this.getElement(),true);goog.style.setPageOffset(this.getElement(),x,opt_y);if(!visible)goog.style.showElement(this.getElement(),false)};
goog.ui.Menu.prototype.getPosition=function(){return this.isVisible()?goog.style.getPageOffset(this.getElement()):null};goog.ui.Menu.prototype.setAllowAutoFocus=function(allow){this.allowAutoFocus_=allow;if(allow)this.setFocusable(true)};goog.ui.Menu.prototype.getAllowAutoFocus=function(){return this.allowAutoFocus_};goog.ui.Menu.prototype.setAllowHighlightDisabled=function(allow){this.allowHighlightDisabled_=allow};goog.ui.Menu.prototype.getAllowHighlightDisabled=function(){return this.allowHighlightDisabled_};
goog.ui.Menu.prototype.setVisible=function(show,opt_force){var visibilityChanged=goog.ui.Menu.superClass_.setVisible.call(this,show,opt_force);if(visibilityChanged&&show&&this.isInDocument()&&this.allowAutoFocus_)this.getKeyEventTarget().focus();return visibilityChanged};goog.ui.Menu.prototype.handleEnterItem=function(e){if(this.allowAutoFocus_)this.getKeyEventTarget().focus();return goog.ui.Menu.superClass_.handleEnterItem.call(this,e)};
goog.ui.Menu.prototype.highlightNextPrefix=function(charStr){var re=new RegExp("^"+goog.string.regExpEscape(charStr),"i");return this.highlightHelper(function(index,max){var start=index<0?0:index;var wrapped=false;do{++index;if(index==max){index=0;wrapped=true}var name=this.getChildAt(index).getCaption();if(name&&name.match(re))return index}while(!wrapped||index!=start);return this.getHighlightedIndex()},this.getHighlightedIndex())};
goog.ui.Menu.prototype.canHighlightItem=function(item){return(this.allowHighlightDisabled_||item.isEnabled())&&item.isVisible()&&item.isSupportedState(goog.ui.Component.State.HOVER)};goog.provide("goog.ui.MenuButtonRenderer");goog.require("goog.dom");goog.require("goog.style");goog.require("goog.ui.CustomButtonRenderer");goog.require("goog.ui.INLINE_BLOCK_CLASSNAME");goog.require("goog.ui.Menu");goog.require("goog.ui.MenuRenderer");goog.require("goog.userAgent");goog.ui.MenuButtonRenderer=function(){goog.ui.CustomButtonRenderer.call(this)};goog.inherits(goog.ui.MenuButtonRenderer,goog.ui.CustomButtonRenderer);goog.addSingletonGetter(goog.ui.MenuButtonRenderer);
goog.ui.MenuButtonRenderer.CSS_CLASS=goog.getCssName("goog-menu-button");goog.ui.MenuButtonRenderer.WRAPPER_PROP_="__goog_wrapper_div";if(goog.userAgent.GECKO)goog.ui.MenuButtonRenderer.prototype.setContent=function(element,content){var caption=goog.ui.MenuButtonRenderer.superClass_.getContentElement.call(this,element&&element.firstChild);if(caption)goog.dom.replaceNode(this.createCaption(content,goog.dom.getDomHelper(element)),caption)};
goog.ui.MenuButtonRenderer.prototype.getContentElement=function(element){var content=goog.ui.MenuButtonRenderer.superClass_.getContentElement.call(this,element&&element.firstChild);if(goog.userAgent.GECKO&&content&&content[goog.ui.MenuButtonRenderer.WRAPPER_PROP_])content=content.firstChild;return content};
goog.ui.MenuButtonRenderer.prototype.decorate=function(button,element){var menuElem=goog.dom.getElementsByTagNameAndClass("*",goog.ui.MenuRenderer.CSS_CLASS,element)[0];if(menuElem){goog.style.showElement(menuElem,false);goog.dom.appendChild(goog.dom.getOwnerDocument(menuElem).body,menuElem);var menu=new goog.ui.Menu;menu.decorate(menuElem);button.setMenu(menu)}return goog.ui.MenuButtonRenderer.superClass_.decorate.call(this,button,element)};
goog.ui.MenuButtonRenderer.prototype.createButton=function(content,dom){return goog.ui.MenuButtonRenderer.superClass_.createButton.call(this,[this.createCaption(content,dom),this.createDropdown(dom)],dom)};goog.ui.MenuButtonRenderer.prototype.createCaption=function(content,dom){return goog.ui.MenuButtonRenderer.wrapCaption(content,this.getCssClass(),dom)};
goog.ui.MenuButtonRenderer.wrapCaption=function(content,cssClass,dom){return dom.createDom("div",goog.ui.INLINE_BLOCK_CLASSNAME+" "+goog.getCssName(cssClass,"caption"),content)};goog.ui.MenuButtonRenderer.prototype.createDropdown=function(dom){return dom.createDom("div",goog.ui.INLINE_BLOCK_CLASSNAME+" "+goog.getCssName(this.getCssClass(),"dropdown"),"\u00a0")};goog.ui.MenuButtonRenderer.prototype.getCssClass=function(){return goog.ui.MenuButtonRenderer.CSS_CLASS};goog.provide("goog.ui.ColorMenuButtonRenderer");goog.require("goog.color");goog.require("goog.dom.classes");goog.require("goog.ui.ControlContent");goog.require("goog.ui.MenuButtonRenderer");goog.require("goog.userAgent");goog.ui.ColorMenuButtonRenderer=function(){goog.ui.MenuButtonRenderer.call(this)};goog.inherits(goog.ui.ColorMenuButtonRenderer,goog.ui.MenuButtonRenderer);goog.addSingletonGetter(goog.ui.ColorMenuButtonRenderer);goog.ui.ColorMenuButtonRenderer.CSS_CLASS="goog-color-menu-button";
goog.ui.ColorMenuButtonRenderer.prototype.createCaption=function(content,dom){return goog.ui.ColorMenuButtonRenderer.superClass_.createCaption.call(this,goog.ui.ColorMenuButtonRenderer.wrapCaption(content,dom),dom)};goog.ui.ColorMenuButtonRenderer.wrapCaption=function(content,dom){return dom.createDom("div",goog.ui.ColorMenuButtonRenderer.CSS_CLASS+"-indicator",content)};
goog.ui.ColorMenuButtonRenderer.prototype.setValue=function(element,value){if(element)goog.ui.ColorMenuButtonRenderer.setCaptionValue(this.getContentElement(element),value)};goog.ui.ColorMenuButtonRenderer.setCaptionValue=function(caption,value){if(caption&&caption.firstChild){var hexColor;try{hexColor=goog.color.parse(value).hex}catch(ex){hexColor=null}caption.firstChild.style.borderBottomColor=hexColor||(goog.userAgent.IE?"":"transparent")}};
goog.ui.ColorMenuButtonRenderer.prototype.initializeDom=function(button){this.setValue(button.getElement(),button.getValue());goog.dom.classes.add(button.getElement(),goog.ui.ColorMenuButtonRenderer.CSS_CLASS);goog.ui.ColorMenuButtonRenderer.superClass_.initializeDom.call(this,button)};goog.provide("goog.ui.PaletteRenderer");goog.require("goog.array");goog.require("goog.dom");goog.require("goog.dom.NodeType");goog.require("goog.dom.a11y");goog.require("goog.dom.classes");goog.require("goog.style");goog.require("goog.ui.ControlRenderer");goog.require("goog.userAgent");goog.ui.PaletteRenderer=function(){goog.ui.ControlRenderer.call(this)};goog.inherits(goog.ui.PaletteRenderer,goog.ui.ControlRenderer);goog.addSingletonGetter(goog.ui.PaletteRenderer);
goog.ui.PaletteRenderer.cellId_=0;goog.ui.PaletteRenderer.CSS_CLASS=goog.getCssName("goog-palette");goog.ui.PaletteRenderer.prototype.createDom=function(palette){var classNames=this.getClassNames(palette);return palette.getDomHelper().createDom("div",classNames?classNames.join(" "):null,this.createGrid(palette.getContent(),palette.getSize(),palette.getDomHelper()))};
goog.ui.PaletteRenderer.prototype.createGrid=function(items,size,dom){var rows=[];for(var row=0,index=0;row<size.height;row++){var cells=[];for(var column=0;column<size.width;column++){var item=items&&items[index++];cells.push(this.createCell(item,dom))}rows.push(this.createRow(cells,dom))}return this.createTable(rows,dom)};
goog.ui.PaletteRenderer.prototype.createTable=function(rows,dom){var table=dom.createDom("table",goog.getCssName(this.getCssClass(),"table"),dom.createDom("tbody",goog.getCssName(this.getCssClass(),"body"),rows));table.cellSpacing=0;table.cellPadding=0;goog.dom.a11y.setRole(table,"grid");return table};goog.ui.PaletteRenderer.prototype.createRow=function(cells,dom){return dom.createDom("tr",goog.getCssName(this.getCssClass(),"row"),cells)};
goog.ui.PaletteRenderer.prototype.createCell=function(node,dom){var cell=dom.createDom("td",{"class":goog.getCssName(this.getCssClass(),"cell"),id:goog.getCssName(this.getCssClass(),"cell-")+goog.ui.PaletteRenderer.cellId_++},node);goog.dom.a11y.setRole(cell,"gridcell");return cell};goog.ui.PaletteRenderer.prototype.canDecorate=function(element){return false};goog.ui.PaletteRenderer.prototype.decorate=function(palette,element){return null};
goog.ui.PaletteRenderer.prototype.setContent=function(element,items){if(element){var tbody=goog.dom.getElementsByTagNameAndClass("tbody",goog.getCssName(this.getCssClass(),"body"),element)[0];if(tbody){var index=0;goog.array.forEach(tbody.rows,function(row){goog.array.forEach(row.cells,function(cell){goog.dom.removeChildren(cell);if(items){var item=items[index++];if(item)goog.dom.appendChild(cell,item)}})});if(index<items.length){var cells=[];var dom=goog.dom.getDomHelper(element);var width=tbody.rows[0].cells.length;
while(index<items.length){var item=items[index++];cells.push(this.createCell(item,dom));if(cells.length==width){var row=this.createRow(cells,dom);goog.dom.appendChild(tbody,row);cells.length=0}}if(cells.length>0){while(cells.length<width)cells.push(this.createCell("",dom));var row=this.createRow(cells,dom);goog.dom.appendChild(tbody,row)}}}goog.style.setUnselectable(element,true,goog.userAgent.GECKO)}};
goog.ui.PaletteRenderer.prototype.getContainingItem=function(palette,node){var root=palette.getElement();while(node&&node.nodeType==goog.dom.NodeType.ELEMENT&&node!=root){if(node.tagName=="TD"&&goog.dom.classes.has(node,goog.getCssName(this.getCssClass(),"cell")))return node.firstChild;node=node.parentNode}return null};
goog.ui.PaletteRenderer.prototype.highlightCell=function(palette,node,highlight){if(node){var cell=node.parentNode;goog.dom.classes.enable(cell,goog.getCssName(this.getCssClass(),"cell-hover"),highlight);var table=palette.getElement().firstChild;goog.dom.a11y.setState(table,"activedescendent",cell.id)}};goog.ui.PaletteRenderer.prototype.selectCell=function(palette,node,select){if(node){var cell=node.parentNode;goog.dom.classes.enable(cell,goog.getCssName(this.getCssClass(),"cell-selected"),select)}};
goog.ui.PaletteRenderer.prototype.getCssClass=function(){return goog.ui.PaletteRenderer.CSS_CLASS};goog.provide("goog.ui.SelectionModel");goog.require("goog.array");goog.require("goog.events.EventTarget");goog.require("goog.events.EventType");goog.ui.SelectionModel=function(opt_items){goog.events.EventTarget.call(this);this.items_=[];this.addItems(opt_items)};goog.inherits(goog.ui.SelectionModel,goog.events.EventTarget);goog.ui.SelectionModel.prototype.selectedItem_=null;goog.ui.SelectionModel.prototype.selectionHandler_=null;goog.ui.SelectionModel.prototype.getSelectionHandler=function(){return this.selectionHandler_};
goog.ui.SelectionModel.prototype.setSelectionHandler=function(handler){this.selectionHandler_=handler};goog.ui.SelectionModel.prototype.getItemCount=function(){return this.items_.length};goog.ui.SelectionModel.prototype.indexOfItem=function(item){return item?goog.array.indexOf(this.items_,item):-1};goog.ui.SelectionModel.prototype.getFirst=function(){return this.items_[0]};goog.ui.SelectionModel.prototype.getLast=function(){return this.items_[this.items_.length-1]};
goog.ui.SelectionModel.prototype.getItemAt=function(index){return this.items_[index]||null};goog.ui.SelectionModel.prototype.addItems=function(items){if(items){goog.array.forEach(items,function(item){this.selectItem_(item,false)},this);goog.array.extend(this.items_,items)}};goog.ui.SelectionModel.prototype.addItem=function(item){this.addItemAt(item,this.getItemCount())};
goog.ui.SelectionModel.prototype.addItemAt=function(item,index){if(item){this.selectItem_(item,false);goog.array.insertAt(this.items_,item,index)}};goog.ui.SelectionModel.prototype.removeItem=function(item){if(item&&goog.array.remove(this.items_,item))if(item==this.selectedItem_){this.selectedItem_=null;this.dispatchEvent(goog.events.EventType.SELECT)}};goog.ui.SelectionModel.prototype.removeItemAt=function(index){this.removeItem(this.getItemAt(index))};
goog.ui.SelectionModel.prototype.getSelectedItem=function(){return this.selectedItem_};goog.ui.SelectionModel.prototype.setSelectedItem=function(item){if(item!=this.selectedItem_){this.selectItem_(this.selectedItem_,false);this.selectedItem_=item;this.selectItem_(item,true)}this.dispatchEvent(goog.events.EventType.SELECT)};goog.ui.SelectionModel.prototype.getSelectedIndex=function(){return this.indexOfItem(this.selectedItem_)};goog.ui.SelectionModel.prototype.setSelectedIndex=function(index){this.setSelectedItem(this.getItemAt(index))};
goog.ui.SelectionModel.prototype.clear=function(){goog.array.clear(this.items_);this.selectedItem_=null};goog.ui.SelectionModel.prototype.disposeInternal=function(){goog.ui.SelectionModel.superClass_.disposeInternal.call(this);delete this.items_;this.selectedItem_=null};goog.ui.SelectionModel.prototype.selectItem_=function(item,select){if(item)if(typeof this.selectionHandler_=="function")this.selectionHandler_(item,select);else if(typeof item.setSelected=="function")item.setSelected(select)};goog.provide("goog.ui.Palette");goog.require("goog.array");goog.require("goog.dom");goog.require("goog.events.EventType");goog.require("goog.events.KeyCodes");goog.require("goog.math.Size");goog.require("goog.ui.Component.Error");goog.require("goog.ui.Component.EventType");goog.require("goog.ui.Control");goog.require("goog.ui.PaletteRenderer");goog.require("goog.ui.SelectionModel");
goog.ui.Palette=function(items,opt_renderer,opt_domHelper){goog.ui.Control.call(this,items,opt_renderer||goog.ui.PaletteRenderer.getInstance(),opt_domHelper)};goog.inherits(goog.ui.Palette,goog.ui.Control);goog.ui.Palette.prototype.size_=null;goog.ui.Palette.prototype.highlightedIndex_=-1;goog.ui.Palette.prototype.selectionModel_=null;
goog.ui.Palette.prototype.disposeInternal=function(){goog.ui.Palette.superClass_.disposeInternal.call(this);if(this.selectionModel_){this.selectionModel_.dispose();this.selectionModel_=null}this.size_=null};
goog.ui.Palette.prototype.setContentInternal=function(items){goog.ui.Palette.superClass_.setContentInternal.call(this,items);this.adjustSize_();if(this.selectionModel_){this.selectionModel_.clear();this.selectionModel_.addItems(items)}else{this.selectionModel_=new goog.ui.SelectionModel(items);this.selectionModel_.setSelectionHandler(goog.bind(this.selectItem_,this));this.getHandler().listen(this.selectionModel_,goog.events.EventType.SELECT,this.handleSelectionChange)}this.highlightedIndex_=-1};
goog.ui.Palette.prototype.getCaption=function(){return null};goog.ui.Palette.prototype.setCaption=function(caption){};goog.ui.Palette.prototype.handleMouseOver=function(e){goog.ui.Palette.superClass_.handleMouseOver.call(this,e);var item=this.getRenderer().getContainingItem(this,e.target);if(item&&e.relatedTarget&&goog.dom.contains(item,e.relatedTarget))return;if(item!=this.getHighlightedItem())this.setHighlightedItem(item)};
goog.ui.Palette.prototype.handleMouseOut=function(e){goog.ui.Palette.superClass_.handleMouseOut.call(this,e);var item=this.getRenderer().getContainingItem(this,e.target);if(item&&e.relatedTarget&&goog.dom.contains(item,e.relatedTarget))return;if(item==this.getHighlightedItem())this.getRenderer().highlightCell(this,item,false)};
goog.ui.Palette.prototype.handleMouseDown=function(e){goog.ui.Palette.superClass_.handleMouseDown.call(this,e);if(this.isActive()){var item=this.getRenderer().getContainingItem(this,e.target);if(item!=this.getHighlightedItem())this.setHighlightedItem(item)}};goog.ui.Palette.prototype.performActionInternal=function(e){var item=this.getHighlightedItem();if(item){this.setSelectedItem(item);return this.dispatchEvent(goog.ui.Component.EventType.ACTION)}return false};
goog.ui.Palette.prototype.handleKeyEvent=function(e){var items=this.getContent();var numItems=items?items.length:0;var numColumns=this.size_.width;if(numItems==0||!this.isEnabled())return false;if(e.keyCode==goog.events.KeyCodes.ENTER||e.keyCode==goog.events.KeyCodes.SPACE)return this.performActionInternal(e);if(e.keyCode==goog.events.KeyCodes.HOME){this.setHighlightedIndex(0);return true}else if(e.keyCode==goog.events.KeyCodes.END){this.setHighlightedIndex(numItems-1);return true}var highlightedIndex=
this.highlightedIndex_<0?this.getSelectedIndex():this.highlightedIndex_;switch(e.keyCode){case goog.events.KeyCodes.LEFT:if(highlightedIndex==-1)highlightedIndex=numItems;if(highlightedIndex>0){this.setHighlightedIndex(highlightedIndex-1);e.preventDefault();return true}break;case goog.events.KeyCodes.RIGHT:if(highlightedIndex<numItems-1){this.setHighlightedIndex(highlightedIndex+1);e.preventDefault();return true}break;case goog.events.KeyCodes.UP:if(highlightedIndex==-1)highlightedIndex=numItems+
numColumns-1;if(highlightedIndex>=numColumns){this.setHighlightedIndex(highlightedIndex-numColumns);e.preventDefault();return true}break;case goog.events.KeyCodes.DOWN:if(highlightedIndex==-1)highlightedIndex=-numColumns;if(highlightedIndex<numItems-numColumns){this.setHighlightedIndex(highlightedIndex+numColumns);e.preventDefault();return true}break}return false};goog.ui.Palette.prototype.handleSelectionChange=function(e){};goog.ui.Palette.prototype.getSize=function(){return this.size_};
goog.ui.Palette.prototype.setSize=function(size,opt_rows){if(this.getElement())throw Error(goog.ui.Component.Error.ALREADY_RENDERED);this.size_=goog.isNumber(size)?new goog.math.Size(size,opt_rows):size;this.adjustSize_()};goog.ui.Palette.prototype.getHighlightedIndex=function(){return this.highlightedIndex_};goog.ui.Palette.prototype.getHighlightedItem=function(){var items=this.getContent();return items&&items[this.highlightedIndex_]};
goog.ui.Palette.prototype.setHighlightedIndex=function(index){if(index!=this.highlightedIndex_){this.highlightIndex_(this.highlightedIndex_,false);this.highlightedIndex_=index;this.highlightIndex_(index,true)}};goog.ui.Palette.prototype.setHighlightedItem=function(item){var items=this.getContent();this.setHighlightedIndex(items?goog.array.indexOf(items,item):-1)};goog.ui.Palette.prototype.getSelectedIndex=function(){return this.selectionModel_?this.selectionModel_.getSelectedIndex():-1};
goog.ui.Palette.prototype.getSelectedItem=function(){return this.selectionModel_?this.selectionModel_.getSelectedItem():null};goog.ui.Palette.prototype.setSelectedIndex=function(index){if(this.selectionModel_)this.selectionModel_.setSelectedIndex(index)};goog.ui.Palette.prototype.setSelectedItem=function(item){if(this.selectionModel_)this.selectionModel_.setSelectedItem(item)};
goog.ui.Palette.prototype.highlightIndex_=function(index,highlight){if(this.getElement()){var items=this.getContent();if(items&&index>=0&&index<items.length)this.getRenderer().highlightCell(this,items[index],highlight)}};goog.ui.Palette.prototype.selectItem_=function(item,select){if(this.getElement())this.getRenderer().selectCell(this,item,select)};
goog.ui.Palette.prototype.adjustSize_=function(){var items=this.getContent();if(items)if(this.size_&&this.size_.width){var minRows=Math.ceil(items.length/this.size_.width);if(!goog.isNumber(this.size_.height)||this.size_.height<minRows)this.size_.height=minRows}else{var length=Math.ceil(Math.sqrt(items.length));this.size_=new goog.math.Size(length,length)}else this.size_=new goog.math.Size(0,0)};goog.provide("goog.ui.ColorPalette");goog.require("goog.array");goog.require("goog.color");goog.require("goog.dom");goog.require("goog.style");goog.require("goog.ui.Palette");goog.require("goog.ui.PaletteRenderer");goog.ui.ColorPalette=function(opt_colors,opt_renderer,opt_domHelper){this.colors_=opt_colors||[];goog.ui.Palette.call(this,null,opt_renderer||goog.ui.PaletteRenderer.getInstance(),opt_domHelper);this.setColors(this.colors_)};goog.inherits(goog.ui.ColorPalette,goog.ui.Palette);
goog.ui.ColorPalette.prototype.normalizedColors_=null;goog.ui.ColorPalette.prototype.getColors=function(){return this.colors_};goog.ui.ColorPalette.prototype.setColors=function(colors){this.colors_=colors;this.normalizedColors_=null;this.setContent(this.createColorNodes_())};goog.ui.ColorPalette.prototype.getSelectedColor=function(){var selectedItem=this.getSelectedItem();if(selectedItem){var color=goog.style.getStyle(selectedItem,"background-color");return goog.ui.ColorPalette.parseColor_(color)}else return null};
goog.ui.ColorPalette.prototype.setSelectedColor=function(color){var hexColor=goog.ui.ColorPalette.parseColor_(color);if(!this.normalizedColors_)this.normalizedColors_=goog.array.map(this.colors_,function(color){return goog.ui.ColorPalette.parseColor_(color)});this.setSelectedIndex(hexColor?goog.array.indexOf(this.normalizedColors_,hexColor):-1)};
goog.ui.ColorPalette.prototype.createColorNodes_=function(){return goog.array.map(this.colors_,function(color){var swatch=this.getDomHelper().createDom("div",{"class":goog.getCssName(this.getRenderer().getCssClass(),"colorswatch"),style:"background-color:"+color});swatch.title=color.charAt(0)=="#"?"RGB ("+goog.color.hexToRgb(color).join(", ")+")":color;return swatch},this)};goog.ui.ColorPalette.parseColor_=function(color){if(color)try{return goog.color.parse(color).hex}catch(ex){}return null};goog.provide("goog.positioning");goog.provide("goog.positioning.Corner");goog.provide("goog.positioning.CornerBit");goog.provide("goog.positioning.Overflow");goog.provide("goog.positioning.OverflowStatus");goog.require("goog.dom");goog.require("goog.dom.TagName");goog.require("goog.math.Box");goog.require("goog.math.Coordinate");goog.require("goog.math.Size");goog.require("goog.style");
goog.positioning.Corner={TOP_LEFT:0,TOP_RIGHT:2,BOTTOM_LEFT:1,BOTTOM_RIGHT:3,TOP_START:4,TOP_END:6,BOTTOM_START:5,BOTTOM_END:7};goog.positioning.CornerBit={BOTTOM:1,RIGHT:2,FLIP_RTL:4};goog.positioning.Overflow={IGNORE:0,ADJUST_X:1,FAIL_X:2,ADJUST_Y:4,FAIL_Y:8,RESIZE_WIDTH:16,RESIZE_HEIGHT:32};goog.positioning.OverflowStatus={NONE:0,ADJUSTED_X:1,ADJUSTED_Y:2,WIDTH_ADJUSTED:4,HEIGHT_ADJUSTED:8,FAILED_LEFT:16,FAILED_RIGHT:32,FAILED_TOP:64,FAILED_BOTTOM:128,FAILED_OUTSIDE_VIEWPORT:256};
goog.positioning.OverflowStatus.FAILED=goog.positioning.OverflowStatus.FAILED_LEFT|goog.positioning.OverflowStatus.FAILED_RIGHT|goog.positioning.OverflowStatus.FAILED_TOP|goog.positioning.OverflowStatus.FAILED_BOTTOM|goog.positioning.OverflowStatus.FAILED_OUTSIDE_VIEWPORT;goog.positioning.OverflowStatus.FAILED_HORIZONTAL=goog.positioning.OverflowStatus.FAILED_LEFT|goog.positioning.OverflowStatus.FAILED_RIGHT;
goog.positioning.OverflowStatus.FAILED_VERTICAL=goog.positioning.OverflowStatus.FAILED_TOP|goog.positioning.OverflowStatus.FAILED_BOTTOM;
goog.positioning.positionAtAnchor=function(anchorElement,anchorElementCorner,movableElement,movableElementCorner,opt_offset,opt_margin,opt_overflow,opt_preferredSize){var moveableParentTopLeft;var parent=movableElement.offsetParent;if(parent){var isBody=parent.tagName==goog.dom.TagName.HTML||parent.tagName==goog.dom.TagName.BODY;if(!isBody||goog.style.getComputedPosition(parent)!="static"){moveableParentTopLeft=goog.style.getPageOffset(parent);if(!isBody)moveableParentTopLeft=goog.math.Coordinate.difference(moveableParentTopLeft,
new goog.math.Coordinate(parent.scrollLeft,parent.scrollTop))}}var anchorRect=goog.positioning.getVisiblePart_(anchorElement);goog.style.translateRectForAnotherFrame(anchorRect,goog.dom.getDomHelper(anchorElement),goog.dom.getDomHelper(movableElement));var corner=goog.positioning.getEffectiveCorner(anchorElement,anchorElementCorner);var absolutePos=new goog.math.Coordinate(corner&goog.positioning.CornerBit.RIGHT?anchorRect.left+anchorRect.width:anchorRect.left,corner&goog.positioning.CornerBit.BOTTOM?
anchorRect.top+anchorRect.height:anchorRect.top);if(moveableParentTopLeft)absolutePos=goog.math.Coordinate.difference(absolutePos,moveableParentTopLeft);if(opt_offset){absolutePos.x+=(corner&goog.positioning.CornerBit.RIGHT?-1:1)*opt_offset.x;absolutePos.y+=(corner&goog.positioning.CornerBit.BOTTOM?-1:1)*opt_offset.y}var viewport;if(opt_overflow){viewport=goog.style.getVisibleRectForElement(movableElement);if(viewport&&moveableParentTopLeft){viewport.top=Math.max(0,viewport.top-moveableParentTopLeft.y);
viewport.right-=moveableParentTopLeft.x;viewport.bottom-=moveableParentTopLeft.y;viewport.left=Math.max(0,viewport.left-moveableParentTopLeft.x)}}return goog.positioning.positionAtCoordinate(absolutePos,movableElement,movableElementCorner,opt_margin,viewport,opt_overflow,opt_preferredSize)};
goog.positioning.getVisiblePart_=function(el){var rect=goog.style.getBounds(el);var visibleBox=goog.style.getVisibleRectForElement(el);if(visibleBox)rect.intersection(goog.math.Rect.createFromBox(visibleBox));return rect};
goog.positioning.positionAtCoordinate=function(absolutePos,movableElement,movableElementCorner,opt_margin,opt_viewport,opt_overflow,opt_preferredSize){absolutePos=absolutePos.clone();var status=goog.positioning.OverflowStatus.NONE;var corner=goog.positioning.getEffectiveCorner(movableElement,movableElementCorner);var elementSize=goog.style.getSize(movableElement);var size=opt_preferredSize?opt_preferredSize.clone():elementSize;if(opt_margin||corner!=goog.positioning.Corner.TOP_LEFT){if(corner&goog.positioning.CornerBit.RIGHT)absolutePos.x-=
size.width+(opt_margin?opt_margin.right:0);else if(opt_margin)absolutePos.x+=opt_margin.left;if(corner&goog.positioning.CornerBit.BOTTOM)absolutePos.y-=size.height+(opt_margin?opt_margin.bottom:0);else if(opt_margin)absolutePos.y+=opt_margin.top}if(opt_overflow){status=opt_viewport?goog.positioning.adjustForViewport(absolutePos,size,opt_viewport,opt_overflow):goog.positioning.OverflowStatus.FAILED_OUTSIDE_VIEWPORT;if(status&goog.positioning.OverflowStatus.FAILED)return status}goog.style.setPosition(movableElement,
absolutePos);if(!goog.math.Size.equals(elementSize,size))goog.style.setSize(movableElement,size);return status};
goog.positioning.adjustForViewport=function(pos,size,viewport,overflow){var status=goog.positioning.OverflowStatus.NONE;if(pos.x<viewport.left&&overflow&goog.positioning.Overflow.ADJUST_X){pos.x=viewport.left;status|=goog.positioning.OverflowStatus.ADJUSTED_X}if(pos.x<viewport.left&&pos.x+size.width>viewport.right&&overflow&goog.positioning.Overflow.RESIZE_WIDTH){size.width-=pos.x+size.width-viewport.right;status|=goog.positioning.OverflowStatus.WIDTH_ADJUSTED}if(pos.x+size.width>viewport.right&&
overflow&goog.positioning.Overflow.ADJUST_X){pos.x=Math.max(viewport.right-size.width,viewport.left);status|=goog.positioning.OverflowStatus.ADJUSTED_X}if(overflow&goog.positioning.Overflow.FAIL_X)status|=(pos.x<viewport.left?goog.positioning.OverflowStatus.FAILED_LEFT:0)|(pos.x+size.width>viewport.right?goog.positioning.OverflowStatus.FAILED_RIGHT:0);if(pos.y<viewport.top&&overflow&goog.positioning.Overflow.ADJUST_Y){pos.y=viewport.top;status|=goog.positioning.OverflowStatus.ADJUSTED_Y}if(pos.y>=
viewport.top&&pos.y+size.height>viewport.bottom&&overflow&goog.positioning.Overflow.RESIZE_HEIGHT){size.height-=pos.y+size.height-viewport.bottom;status|=goog.positioning.OverflowStatus.HEIGHT_ADJUSTED}if(pos.y+size.height>viewport.bottom&&overflow&goog.positioning.Overflow.ADJUST_Y){pos.y=Math.max(viewport.bottom-size.height,viewport.top);status|=goog.positioning.OverflowStatus.ADJUSTED_Y}if(overflow&goog.positioning.Overflow.FAIL_Y)status|=(pos.y<viewport.top?goog.positioning.OverflowStatus.FAILED_TOP:
0)|(pos.y+size.height>viewport.bottom?goog.positioning.OverflowStatus.FAILED_BOTTOM:0);return status};goog.positioning.getEffectiveCorner=function(element,corner){return(corner&goog.positioning.CornerBit.FLIP_RTL&&goog.style.isRightToLeft(element)?corner^goog.positioning.CornerBit.RIGHT:corner)&~goog.positioning.CornerBit.FLIP_RTL};goog.positioning.flipCornerHorizontal=function(corner){return corner^goog.positioning.CornerBit.RIGHT};
goog.positioning.flipCornerVertical=function(corner){return corner^goog.positioning.CornerBit.BOTTOM};goog.positioning.flipCorner=function(corner){return corner^goog.positioning.CornerBit.BOTTOM^goog.positioning.CornerBit.RIGHT};goog.provide("goog.positioning.AbstractPosition");goog.require("goog.math.Box");goog.require("goog.math.Size");goog.require("goog.positioning.Corner");goog.positioning.AbstractPosition=function(){};goog.positioning.AbstractPosition.prototype.reposition=function(movableElement,corner,opt_margin,opt_preferredSize){};goog.provide("goog.positioning.AnchoredPosition");goog.require("goog.math.Box");goog.require("goog.positioning");goog.require("goog.positioning.AbstractPosition");goog.positioning.AnchoredPosition=function(anchorElement,corner){this.element=anchorElement;this.corner=corner};goog.inherits(goog.positioning.AnchoredPosition,goog.positioning.AbstractPosition);
goog.positioning.AnchoredPosition.prototype.reposition=function(movableElement,movableCorner,opt_margin){goog.positioning.positionAtAnchor(this.element,this.corner,movableElement,movableCorner,undefined,opt_margin)};goog.provide("goog.positioning.AnchoredViewportPosition");goog.require("goog.math.Box");goog.require("goog.positioning");goog.require("goog.positioning.AnchoredPosition");goog.require("goog.positioning.Corner");goog.require("goog.positioning.Overflow");goog.require("goog.positioning.OverflowStatus");goog.positioning.AnchoredViewportPosition=function(anchorElement,corner,opt_adjust){goog.positioning.AnchoredPosition.call(this,anchorElement,corner);this.adjust_=opt_adjust};
goog.inherits(goog.positioning.AnchoredViewportPosition,goog.positioning.AnchoredPosition);
goog.positioning.AnchoredViewportPosition.prototype.reposition=function(movableElement,movableCorner,opt_margin,opt_preferredSize){var status=goog.positioning.positionAtAnchor(this.element,this.corner,movableElement,movableCorner,null,opt_margin,goog.positioning.Overflow.FAIL_X|goog.positioning.Overflow.FAIL_Y,opt_preferredSize);if(status&goog.positioning.OverflowStatus.FAILED){var cornerFallback=this.corner;var movableCornerFallback=movableCorner;if(status&goog.positioning.OverflowStatus.FAILED_HORIZONTAL){cornerFallback=
goog.positioning.flipCornerHorizontal(cornerFallback);movableCornerFallback=goog.positioning.flipCornerHorizontal(movableCornerFallback)}if(status&goog.positioning.OverflowStatus.FAILED_VERTICAL){cornerFallback=goog.positioning.flipCornerVertical(cornerFallback);movableCornerFallback=goog.positioning.flipCornerVertical(movableCornerFallback)}status=goog.positioning.positionAtAnchor(this.element,cornerFallback,movableElement,movableCornerFallback,null,opt_margin,goog.positioning.Overflow.FAIL_X|goog.positioning.Overflow.FAIL_Y,
opt_preferredSize);if(status&goog.positioning.OverflowStatus.FAILED)if(this.adjust_)goog.positioning.positionAtAnchor(this.element,this.corner,movableElement,movableCorner,null,opt_margin,goog.positioning.Overflow.ADJUST_X|goog.positioning.Overflow.ADJUST_Y,opt_preferredSize);else goog.positioning.positionAtAnchor(this.element,this.corner,movableElement,movableCorner,null,opt_margin,goog.positioning.Overflow.IGNORE,opt_preferredSize)}};goog.provide("goog.positioning.MenuAnchoredPosition");goog.require("goog.math.Box");goog.require("goog.math.Size");goog.require("goog.positioning");goog.require("goog.positioning.AnchoredViewportPosition");goog.require("goog.positioning.Corner");goog.require("goog.positioning.Overflow");goog.positioning.MenuAnchoredPosition=function(anchorElement,corner,opt_adjust,opt_resize){goog.positioning.AnchoredViewportPosition.call(this,anchorElement,corner,opt_adjust);this.resize_=opt_resize};
goog.inherits(goog.positioning.MenuAnchoredPosition,goog.positioning.AnchoredViewportPosition);
goog.positioning.MenuAnchoredPosition.prototype.reposition=function(movableElement,movableCorner,opt_margin,opt_preferredSize){if(this.resize_)goog.positioning.positionAtAnchor(this.element,this.corner,movableElement,movableCorner,null,opt_margin,goog.positioning.Overflow.ADJUST_X|goog.positioning.Overflow.RESIZE_HEIGHT,opt_preferredSize);else goog.positioning.MenuAnchoredPosition.superClass_.reposition.call(this,movableElement,movableCorner,opt_margin,opt_preferredSize)};goog.provide("goog.ui.MenuButton");goog.require("goog.Timer");goog.require("goog.dom");goog.require("goog.dom.a11y");goog.require("goog.dom.a11y.State");goog.require("goog.events.EventType");goog.require("goog.events.KeyCodes");goog.require("goog.events.KeyHandler.EventType");goog.require("goog.math.Box");goog.require("goog.math.Rect");goog.require("goog.positioning.Corner");goog.require("goog.positioning.MenuAnchoredPosition");goog.require("goog.style");goog.require("goog.ui.Button");goog.require("goog.ui.Component.EventType");
goog.require("goog.ui.Component.State");goog.require("goog.ui.ControlContent");goog.require("goog.ui.Menu");goog.require("goog.ui.MenuButtonRenderer");goog.require("goog.ui.registry");goog.ui.MenuButton=function(content,opt_menu,opt_renderer,opt_domHelper){goog.ui.Button.call(this,content,opt_renderer||goog.ui.MenuButtonRenderer.getInstance(),opt_domHelper);this.setSupportedState(goog.ui.Component.State.OPENED,true);if(opt_menu)this.setMenu(opt_menu);this.timer_=new goog.Timer(500)};
goog.inherits(goog.ui.MenuButton,goog.ui.Button);goog.ui.MenuButton.prototype.menu_;goog.ui.MenuButton.prototype.alignToStart_=true;goog.ui.MenuButton.prototype.scrollOnOverflow_=false;goog.ui.MenuButton.prototype.isFocusablePopupMenu_=false;goog.ui.MenuButton.prototype.timer_;goog.ui.MenuButton.prototype.buttonRect_;goog.ui.MenuButton.prototype.viewportBox_;goog.ui.MenuButton.prototype.originalSize_;
goog.ui.MenuButton.prototype.enterDocument=function(){goog.ui.MenuButton.superClass_.enterDocument.call(this);if(this.menu_)this.attachMenuEventListeners_(this.menu_,true);goog.dom.a11y.setState(this.getElement(),goog.dom.a11y.State.HASPOPUP,"true")};
goog.ui.MenuButton.prototype.exitDocument=function(){goog.ui.MenuButton.superClass_.exitDocument.call(this);if(this.menu_){this.setOpen(false);this.menu_.exitDocument();this.attachMenuEventListeners_(this.menu_,false);var menuElement=this.menu_.getElement();if(menuElement)goog.dom.removeNode(menuElement)}};goog.ui.MenuButton.prototype.disposeInternal=function(){goog.ui.MenuButton.superClass_.disposeInternal.call(this);if(this.menu_){this.menu_.dispose();delete this.menu_}this.timer_.dispose()};
goog.ui.MenuButton.prototype.handleMouseDown=function(e){goog.ui.MenuButton.superClass_.handleMouseDown.call(this,e);if(this.isActive()){this.setOpen(!this.isOpen());if(this.menu_)this.menu_.setMouseButtonPressed(this.isOpen())}};goog.ui.MenuButton.prototype.handleMouseUp=function(e){goog.ui.MenuButton.superClass_.handleMouseUp.call(this,e);if(this.menu_&&!this.isActive())this.menu_.setMouseButtonPressed(false)};
goog.ui.MenuButton.prototype.performActionInternal=function(e){this.setActive(false);return true};goog.ui.MenuButton.prototype.handleDocumentMouseDown=function(e){if(this.menu_&&this.menu_.isVisible()&&!this.containsElement(e.target))this.setOpen(false)};goog.ui.MenuButton.prototype.containsElement=function(element){return element&&goog.dom.contains(this.getElement(),element)||this.menu_&&this.menu_.containsElement(element)||false};
goog.ui.MenuButton.prototype.handleKeyEventInternal=function(e){var eventType=e.keyCode==goog.events.KeyCodes.SPACE?goog.events.EventType.KEYUP:goog.events.KeyHandler.EventType.KEY;if(e.type!=eventType)return false;if(this.menu_&&this.menu_.isVisible()){var handledByMenu=this.menu_.handleKeyEvent(e);if(e.keyCode==goog.events.KeyCodes.ESC){this.setOpen(false);return true}return handledByMenu}if(e.keyCode==goog.events.KeyCodes.DOWN||e.keyCode==goog.events.KeyCodes.UP||e.keyCode==goog.events.KeyCodes.SPACE){this.setOpen(true);
return true}return false};goog.ui.MenuButton.prototype.handleMenuAction=function(e){this.setOpen(false)};goog.ui.MenuButton.prototype.handleMenuBlur=function(e){if(!this.isActive())this.setOpen(false)};goog.ui.MenuButton.prototype.handleBlur=function(e){if(!this.isFocusablePopupMenu())this.setOpen(false);goog.ui.MenuButton.superClass_.handleBlur.call(this,e)};goog.ui.MenuButton.prototype.getMenu=function(){if(!this.menu_)this.setMenu(new goog.ui.Menu(this.getDomHelper()));return this.menu_||null};
goog.ui.MenuButton.prototype.setMenu=function(menu){var oldMenu=this.menu_;if(menu!=oldMenu){if(oldMenu){this.setOpen(false);if(this.isInDocument())this.attachMenuEventListeners_(oldMenu,false);delete this.menu_}if(menu){this.menu_=menu;menu.setParent(this);menu.setVisible(false);menu.setAllowAutoFocus(this.isFocusablePopupMenu());if(this.isInDocument())this.attachMenuEventListeners_(menu,true)}}return oldMenu};goog.ui.MenuButton.prototype.addItem=function(item){this.getMenu().addChild(item,true)};
goog.ui.MenuButton.prototype.addItemAt=function(item,index){this.getMenu().addChildAt(item,index,true)};goog.ui.MenuButton.prototype.removeItem=function(item){var child=this.getMenu().removeChild(item,true);if(child)child.dispose()};goog.ui.MenuButton.prototype.removeItemAt=function(index){var child=this.getMenu().removeChildAt(index,true);if(child)child.dispose()};goog.ui.MenuButton.prototype.getItemAt=function(index){return this.menu_?this.menu_.getChildAt(index):null};
goog.ui.MenuButton.prototype.getItemCount=function(){return this.menu_?this.menu_.getChildCount():0};goog.ui.MenuButton.prototype.setVisible=function(visible,opt_force){var visibilityChanged=goog.ui.MenuButton.superClass_.setVisible.call(this,visible,opt_force);if(visibilityChanged&&!this.isVisible())this.setOpen(false);return visibilityChanged};goog.ui.MenuButton.prototype.setEnabled=function(enable){goog.ui.MenuButton.superClass_.setEnabled.call(this,enable);if(!this.isEnabled())this.setOpen(false)};
goog.ui.MenuButton.prototype.isAlignMenuToStart=function(){return this.alignToStart_};goog.ui.MenuButton.prototype.setAlignMenuToStart=function(alignToStart){this.alignToStart_=alignToStart};goog.ui.MenuButton.prototype.setScrollOnOverflow=function(scrollOnOverflow){this.scrollOnOverflow_=scrollOnOverflow};goog.ui.MenuButton.prototype.isScrollOnOverflow=function(){return this.scrollOnOverflow_};goog.ui.MenuButton.prototype.isFocusablePopupMenu=function(){return this.isFocusablePopupMenu_};
goog.ui.MenuButton.prototype.setFocusablePopupMenu=function(focusable){this.isFocusablePopupMenu_=focusable};goog.ui.MenuButton.prototype.showMenu=function(){this.setOpen(true)};goog.ui.MenuButton.prototype.hideMenu=function(){this.setOpen(false)};
goog.ui.MenuButton.prototype.setOpen=function(open){goog.ui.MenuButton.superClass_.setOpen.call(this,open);if(this.menu_&&this.hasState(goog.ui.Component.State.OPENED)==open){if(open){if(!this.menu_.isInDocument())this.menu_.render();this.viewportBox_=goog.style.getVisibleRectForElement(this.getElement());this.buttonRect_=goog.style.getBounds(this.getElement());this.positionMenu();this.menu_.setHighlightedIndex(-1)}else{this.setActive(false);this.menu_.setMouseButtonPressed(false);if(goog.isDefAndNotNull(this.originalSize_)){this.originalSize_=
undefined;var elem=this.menu_.getElement();if(elem)goog.style.setSize(elem,"","")}}this.menu_.setVisible(open);this.attachPopupListeners_(open)}};
goog.ui.MenuButton.prototype.positionMenu=function(){var anchorCorner=this.isAlignMenuToStart()?goog.positioning.Corner.BOTTOM_START:goog.positioning.Corner.BOTTOM_END;var position=new goog.positioning.MenuAnchoredPosition(this.getElement(),anchorCorner,!this.scrollOnOverflow_,this.scrollOnOverflow_);var elem=this.menu_.getElement();if(!this.menu_.isVisible()){elem.style.visibility="hidden";goog.style.showElement(elem,true)}if(!this.originalSize_&&this.scrollOnOverflow_)this.originalSize_=goog.style.getSize(elem);
var popupCorner=this.isAlignMenuToStart()?goog.positioning.Corner.TOP_START:goog.positioning.Corner.TOP_END;position.reposition(elem,popupCorner,null,this.originalSize_);if(!this.menu_.isVisible()){goog.style.showElement(elem,false);elem.style.visibility="visible"}};
goog.ui.MenuButton.prototype.onTick_=function(e){var currentButtonRect=goog.style.getBounds(this.getElement());var currentViewport=goog.style.getVisibleRectForElement(this.getElement());if(!goog.math.Rect.equals(this.buttonRect_,currentButtonRect)||!goog.math.Box.equals(this.viewportBox_,currentViewport)){this.buttonRect_=currentButtonRect;this.viewportBox_=currentViewport;this.positionMenu()}};
goog.ui.MenuButton.prototype.attachMenuEventListeners_=function(menu,attach){var handler=this.getHandler();var method=attach?handler.listen:handler.unlisten;method.call(handler,menu,goog.ui.Component.EventType.ACTION,this.handleMenuAction);method.call(handler,menu,goog.ui.Component.EventType.HIGHLIGHT,this.handleHighlightItem);method.call(handler,menu,goog.ui.Component.EventType.UNHIGHLIGHT,this.handleUnHighlightItem)};
goog.ui.MenuButton.prototype.handleHighlightItem=function(e){goog.dom.a11y.setState(this.getElement(),goog.dom.a11y.State.ACTIVEDESCENDANT,e.target.getElement().id)};goog.ui.MenuButton.prototype.handleUnHighlightItem=function(e){if(!this.menu_.getHighlighted())goog.dom.a11y.setState(this.getElement(),goog.dom.a11y.State.ACTIVEDESCENDANT,"")};
goog.ui.MenuButton.prototype.attachPopupListeners_=function(attach){var handler=this.getHandler();var method=attach?handler.listen:handler.unlisten;method.call(handler,this.getDomHelper().getDocument(),goog.events.EventType.MOUSEDOWN,this.handleDocumentMouseDown,true);if(this.isFocusablePopupMenu())method.call(handler,this.menu_,goog.ui.Component.EventType.BLUR,this.handleMenuBlur);method.call(handler,this.timer_,goog.Timer.TICK,this.onTick_);if(attach)this.timer_.start();else this.timer_.stop()};
goog.ui.registry.setDecoratorByClassName(goog.ui.MenuButtonRenderer.CSS_CLASS,function(){return new goog.ui.MenuButton(null)});goog.provide("goog.ui.ColorMenuButton");goog.require("goog.array");goog.require("goog.object");goog.require("goog.ui.ColorMenuButtonRenderer");goog.require("goog.ui.ColorPalette");goog.require("goog.ui.Component.EventType");goog.require("goog.ui.ControlContent");goog.require("goog.ui.Menu");goog.require("goog.ui.MenuButton");goog.require("goog.ui.registry");
goog.ui.ColorMenuButton=function(content,opt_menu,opt_renderer,opt_domHelper){goog.ui.MenuButton.call(this,content,opt_menu,opt_renderer||goog.ui.ColorMenuButtonRenderer.getInstance(),opt_domHelper)};goog.inherits(goog.ui.ColorMenuButton,goog.ui.MenuButton);
goog.ui.ColorMenuButton.PALETTES={GRAYSCALE:["#000","#444","#666","#999","#ccc","#eee","#f3f3f3","#fff"],SOLID:["#f00","#f90","#ff0","#0f0","#0ff","#00f","#90f","#f0f"],PASTEL:["#f4cccc","#fce5cd","#fff2cc","#d9ead3","#d0e0e3","#cfe2f3","#d9d2e9","#ead1dc","#ea9999","#f9cb9c","#ffe599","#b6d7a8","#a2c4c9","#9fc5e8","#b4a7d6","#d5a6bd","#e06666","#f6b26b","#ffd966","#93c47d","#76a5af","#6fa8dc","#8e7cc3","#c27ba0","#cc0000","#e69138","#f1c232","#6aa84f","#45818e","#3d85c6","#674ea7","#a64d79","#990000",
"#b45f06","#bf9000","#38761d","#134f5c","#0b5394","#351c75","#741b47","#660000","#783f04","#7f6000","#274e13","#0c343d","#073763","#20124d","#4c1130"]};goog.ui.ColorMenuButton.NO_COLOR="none";
goog.ui.ColorMenuButton.newColorMenu=function(opt_extraItems,opt_domHelper){var menu=new goog.ui.Menu(opt_domHelper);if(opt_extraItems)goog.array.forEach(opt_extraItems,function(item){menu.addChild(item,true)});goog.object.forEach(goog.ui.ColorMenuButton.PALETTES,function(colors){var palette=new goog.ui.ColorPalette(colors,null,opt_domHelper);palette.setSize(8);menu.addChild(palette,true)});return menu};goog.ui.ColorMenuButton.prototype.getSelectedColor=function(){return this.getValue()};
goog.ui.ColorMenuButton.prototype.setSelectedColor=function(color){this.setValue(color)};goog.ui.ColorMenuButton.prototype.setValue=function(color){for(var i=0,item;item=this.getItemAt(i);i++)if(typeof item.setSelectedColor=="function")item.setSelectedColor(color);goog.ui.ColorMenuButton.superClass_.setValue.call(this,color)};
goog.ui.ColorMenuButton.prototype.handleMenuAction=function(e){if(typeof e.target.getSelectedColor=="function")this.setValue(e.target.getSelectedColor());else if(e.target.getValue()==goog.ui.ColorMenuButton.NO_COLOR)this.setValue(null);goog.ui.ColorMenuButton.superClass_.handleMenuAction.call(this,e);e.stopPropagation();this.dispatchEvent(goog.ui.Component.EventType.ACTION)};
goog.ui.ColorMenuButton.prototype.setOpen=function(open){if(open&&this.getItemCount()==0){this.setMenu(goog.ui.ColorMenuButton.newColorMenu(null,this.getDomHelper()));this.setValue(this.getValue())}goog.ui.ColorMenuButton.superClass_.setOpen.call(this,open)};goog.ui.registry.setDecoratorByClassName(goog.ui.ColorMenuButtonRenderer.CSS_CLASS,function(){return new goog.ui.ColorMenuButton(null)});goog.provide("goog.ui.ToolbarMenuButtonRenderer");goog.require("goog.ui.MenuButtonRenderer");goog.ui.ToolbarMenuButtonRenderer=function(){goog.ui.MenuButtonRenderer.call(this)};goog.inherits(goog.ui.ToolbarMenuButtonRenderer,goog.ui.MenuButtonRenderer);goog.addSingletonGetter(goog.ui.ToolbarMenuButtonRenderer);goog.ui.ToolbarMenuButtonRenderer.CSS_CLASS="goog-toolbar-menu-button";goog.ui.ToolbarMenuButtonRenderer.prototype.getCssClass=function(){return goog.ui.ToolbarMenuButtonRenderer.CSS_CLASS};goog.provide("goog.ui.ToolbarColorMenuButtonRenderer");goog.require("goog.dom.classes");goog.require("goog.ui.ColorMenuButtonRenderer");goog.require("goog.ui.ControlContent");goog.require("goog.ui.MenuButtonRenderer");goog.require("goog.ui.ToolbarMenuButtonRenderer");goog.ui.ToolbarColorMenuButtonRenderer=function(){goog.ui.ToolbarMenuButtonRenderer.call(this)};goog.inherits(goog.ui.ToolbarColorMenuButtonRenderer,goog.ui.ToolbarMenuButtonRenderer);goog.addSingletonGetter(goog.ui.ToolbarColorMenuButtonRenderer);
goog.ui.ToolbarColorMenuButtonRenderer.prototype.createCaption=function(content,dom){return goog.ui.MenuButtonRenderer.wrapCaption(goog.ui.ColorMenuButtonRenderer.wrapCaption(content,dom),this.getCssClass(),dom)};goog.ui.ToolbarColorMenuButtonRenderer.prototype.setValue=function(element,value){if(element)goog.ui.ColorMenuButtonRenderer.setCaptionValue(this.getContentElement(element),value)};
goog.ui.ToolbarColorMenuButtonRenderer.prototype.initializeDom=function(button){this.setValue(button.getElement(),button.getValue());goog.dom.classes.add(button.getElement(),"goog-toolbar-color-menu-button");goog.ui.ToolbarColorMenuButtonRenderer.superClass_.initializeDom.call(this,button)};goog.provide("goog.ui.ToolbarColorMenuButton");goog.require("goog.ui.ColorMenuButton");goog.require("goog.ui.ControlContent");goog.require("goog.ui.ToolbarColorMenuButtonRenderer");goog.require("goog.ui.registry");goog.ui.ToolbarColorMenuButton=function(content,opt_menu,opt_renderer,opt_domHelper){goog.ui.ColorMenuButton.call(this,content,opt_menu,opt_renderer||goog.ui.ToolbarColorMenuButtonRenderer.getInstance(),opt_domHelper)};goog.inherits(goog.ui.ToolbarColorMenuButton,goog.ui.ColorMenuButton);
goog.ui.registry.setDecoratorByClassName("goog-toolbar-color-menu-button",function(){return new goog.ui.ToolbarColorMenuButton(null)});goog.provide("goog.ui.ToolbarMenuButton");goog.require("goog.ui.ControlContent");goog.require("goog.ui.MenuButton");goog.require("goog.ui.ToolbarMenuButtonRenderer");goog.require("goog.ui.registry");goog.ui.ToolbarMenuButton=function(content,opt_menu,opt_renderer,opt_domHelper){goog.ui.MenuButton.call(this,content,opt_menu,opt_renderer||goog.ui.ToolbarMenuButtonRenderer.getInstance(),opt_domHelper)};goog.inherits(goog.ui.ToolbarMenuButton,goog.ui.MenuButton);
goog.ui.registry.setDecoratorByClassName(goog.ui.ToolbarMenuButtonRenderer.CSS_CLASS,function(){return new goog.ui.ToolbarMenuButton(null)});goog.provide("goog.ui.Select");goog.require("goog.events.EventType");goog.require("goog.ui.Component.EventType");goog.require("goog.ui.ControlContent");goog.require("goog.ui.MenuButton");goog.require("goog.ui.SelectionModel");goog.require("goog.ui.registry");goog.ui.Select=function(caption,opt_menu,opt_renderer,opt_domHelper){goog.ui.MenuButton.call(this,caption,opt_menu,opt_renderer,opt_domHelper);this.setDefaultCaption(caption)};goog.inherits(goog.ui.Select,goog.ui.MenuButton);
goog.ui.Select.prototype.selectionModel_=null;goog.ui.Select.prototype.defaultCaption_=null;goog.ui.Select.prototype.enterDocument=function(){goog.ui.Select.superClass_.enterDocument.call(this);this.updateCaption_()};goog.ui.Select.prototype.decorateInternal=function(element){goog.ui.Select.superClass_.decorateInternal.call(this,element);var caption=this.getCaption();if(caption)this.setDefaultCaption(caption);else this.setSelectedIndex(0)};
goog.ui.Select.prototype.disposeInternal=function(){goog.ui.Select.superClass_.disposeInternal.call(this);if(this.selectionModel_){this.selectionModel_.dispose();this.selectionModel_=null}this.defaultCaption_=null};goog.ui.Select.prototype.handleMenuAction=function(e){this.setSelectedItem(e.target);goog.ui.Select.superClass_.handleMenuAction.call(this,e);e.stopPropagation();this.dispatchEvent(goog.ui.Component.EventType.ACTION)};
goog.ui.Select.prototype.handleSelectionChange=function(e){var item=this.getSelectedItem();goog.ui.Select.superClass_.setValue.call(this,item&&item.getValue());this.updateCaption_()};goog.ui.Select.prototype.setMenu=function(menu){var oldMenu=goog.ui.Select.superClass_.setMenu.call(this,menu);if(menu!=oldMenu){if(this.selectionModel_)this.selectionModel_.clear();if(menu)if(this.selectionModel_)menu.forEachChild(function(child,index){this.selectionModel_.addItem(child)},this);else this.createSelectionModel_(menu)}return oldMenu};
goog.ui.Select.prototype.getDefaultCaption=function(){return this.defaultCaption_};goog.ui.Select.prototype.setDefaultCaption=function(caption){this.defaultCaption_=caption;this.updateCaption_()};goog.ui.Select.prototype.addItem=function(item){goog.ui.Select.superClass_.addItem.call(this,item);if(this.selectionModel_)this.selectionModel_.addItem(item);else this.createSelectionModel_(this.getMenu())};
goog.ui.Select.prototype.addItemAt=function(item,index){goog.ui.Select.superClass_.addItemAt.call(this,item,index);if(this.selectionModel_)this.selectionModel_.addItemAt(item,index);else this.createSelectionModel_(this.getMenu())};goog.ui.Select.prototype.removeItem=function(item){goog.ui.Select.superClass_.removeItem.call(this,item);if(this.selectionModel_)this.selectionModel_.removeItem(item)};
goog.ui.Select.prototype.removeItemAt=function(index){goog.ui.Select.superClass_.removeItemAt.call(this,index);if(this.selectionModel_)this.selectionModel_.removeItemAt(index)};goog.ui.Select.prototype.setSelectedItem=function(item){if(this.selectionModel_)this.selectionModel_.setSelectedItem(item)};goog.ui.Select.prototype.setSelectedIndex=function(index){if(this.selectionModel_)this.setSelectedItem(this.selectionModel_.getItemAt(index))};
goog.ui.Select.prototype.setValue=function(value){if(goog.isDefAndNotNull(value)&&this.selectionModel_)for(var i=0,item;item=this.selectionModel_.getItemAt(i);i++)if(item&&typeof item.getValue=="function"&&item.getValue()==value){this.setSelectedItem(item);return}this.setSelectedItem(null)};goog.ui.Select.prototype.getSelectedItem=function(){return this.selectionModel_?this.selectionModel_.getSelectedItem():null};
goog.ui.Select.prototype.getSelectedIndex=function(){return this.selectionModel_?this.selectionModel_.getSelectedIndex():-1};goog.ui.Select.prototype.getSelectionModel=function(){return this.selectionModel_};
goog.ui.Select.prototype.createSelectionModel_=function(opt_component){this.selectionModel_=new goog.ui.SelectionModel;if(opt_component)opt_component.forEachChild(function(child,index){this.selectionModel_.addItem(child)},this);this.getHandler().listen(this.selectionModel_,goog.events.EventType.SELECT,this.handleSelectionChange)};goog.ui.Select.prototype.updateCaption_=function(){var item=this.getSelectedItem();this.setContent(item?item.getCaption():this.defaultCaption_)};
goog.ui.Select.prototype.setOpen=function(open){goog.ui.Select.superClass_.setOpen.call(this,open);if(this.isOpen())this.getMenu().setHighlightedIndex(this.getSelectedIndex())};goog.ui.registry.setDecoratorByClassName(goog.getCssName("goog-select"),function(){return new goog.ui.Select(null)});goog.provide("goog.ui.ToolbarSelect");goog.require("goog.ui.ControlContent");goog.require("goog.ui.Select");goog.require("goog.ui.ToolbarMenuButtonRenderer");goog.require("goog.ui.registry");goog.ui.ToolbarSelect=function(caption,opt_menu,opt_renderer,opt_domHelper){goog.ui.Select.call(this,caption,opt_menu,opt_renderer||goog.ui.ToolbarMenuButtonRenderer.getInstance(),opt_domHelper)};goog.inherits(goog.ui.ToolbarSelect,goog.ui.Select);
goog.ui.registry.setDecoratorByClassName("goog-toolbar-select",function(){return new goog.ui.ToolbarSelect(null)});goog.provide("goog.ui.LabelInput");goog.require("goog.Timer");goog.require("goog.dom");goog.require("goog.dom.classes");goog.require("goog.events");goog.require("goog.events.EventHandler");goog.require("goog.events.EventType");goog.require("goog.ui.Component");goog.ui.LabelInput=function(opt_label,opt_domHelper){goog.ui.Component.call(this,opt_domHelper);this.label_=opt_label||""};goog.inherits(goog.ui.LabelInput,goog.ui.Component);goog.ui.LabelInput.prototype.ffKeyRestoreValue_=null;goog.ui.LabelInput.prototype.eventHandler_;
goog.ui.LabelInput.prototype.createDom=function(){this.setElementInternal(this.getDomHelper().createDom("input",{type:"text"}))};goog.ui.LabelInput.prototype.decorateInternal=function(element){goog.ui.LabelInput.superClass_.decorateInternal.call(this,element);if(!this.label_)this.label_=element.getAttribute("label")||""};goog.ui.LabelInput.prototype.enterDocument=function(){goog.ui.LabelInput.superClass_.enterDocument.call(this);this.attachEvents_();this.check_();this.getElement().labelInput_=this};
goog.ui.LabelInput.prototype.exitDocument=function(){goog.ui.LabelInput.superClass_.exitDocument.call(this);this.detachEvents_();this.getElement().labelInput_=null};
goog.ui.LabelInput.prototype.attachEvents_=function(){var eh=new goog.events.EventHandler(this);eh.listen(this.getElement(),goog.events.EventType.FOCUS,this.handleFocus_);eh.listen(this.getElement(),goog.events.EventType.BLUR,this.handleBlur_);if(goog.userAgent.GECKO)eh.listen(this.getElement(),[goog.events.EventType.KEYPRESS,goog.events.EventType.KEYDOWN,goog.events.EventType.KEYUP],this.handleEscapeKeys_);var d=goog.dom.getOwnerDocument(this.getElement());var w=goog.dom.getWindow(d);eh.listen(w,
goog.events.EventType.LOAD,this.handleWindowLoad_);this.eventHandler_=eh;this.attachEventsToForm_()};goog.ui.LabelInput.prototype.attachEventsToForm_=function(){if(!this.formAttached_&&this.eventHandler_&&this.getElement().form){this.eventHandler_.listen(this.getElement().form,goog.events.EventType.SUBMIT,this.handleFormSubmit_);this.formAttached_=true}};goog.ui.LabelInput.prototype.detachEvents_=function(){if(this.eventHandler_){this.eventHandler_.dispose();this.eventHandler_=null}};
goog.ui.LabelInput.prototype.disposeInternal=function(){goog.ui.LabelInput.superClass_.disposeInternal.call(this);this.detachEvents_()};goog.ui.LabelInput.prototype.LABEL_CLASS_NAME="label-input-label";
goog.ui.LabelInput.prototype.handleFocus_=function(e){this.hasFocus_=true;goog.dom.classes.remove(this.getElement(),this.LABEL_CLASS_NAME);if(!this.hasChanged()&&!this.inFocusAndSelect_){var me=this;var clearValue=function(){me.getElement().value=""};if(goog.userAgent.IE)goog.Timer.callOnce(clearValue,10);else clearValue()}};goog.ui.LabelInput.prototype.handleBlur_=function(e){this.ffKeyRestoreValue_=null;this.hasFocus_=false;this.check_()};
goog.ui.LabelInput.prototype.handleEscapeKeys_=function(e){if(e.keyCode==27){if(e.type==goog.events.EventType.KEYDOWN)this.ffKeyRestoreValue_=this.getElement().value;else if(e.type==goog.events.EventType.KEYPRESS)this.getElement().value=this.ffKeyRestoreValue_;else if(e.type==goog.events.EventType.KEYUP)this.ffKeyRestoreValue_=null;e.preventDefault()}};
goog.ui.LabelInput.prototype.handleFormSubmit_=function(e){if(!this.hasChanged()){this.getElement().value="";goog.Timer.callOnce(this.handleAfterSubmit_,10,this)}};goog.ui.LabelInput.prototype.handleAfterSubmit_=function(e){if(!this.hasChanged())this.getElement().value=this.label_};goog.ui.LabelInput.prototype.handleWindowLoad_=function(e){this.check_()};goog.ui.LabelInput.prototype.hasChanged=function(){return this.getElement().value!=""&&this.getElement().value!=this.label_};
goog.ui.LabelInput.prototype.clear=function(){this.getElement().value="";if(this.ffKeyRestoreValue_!=null)this.ffKeyRestoreValue_=""};goog.ui.LabelInput.prototype.setValue=function(s){if(this.ffKeyRestoreValue_!=null)this.ffKeyRestoreValue_=s;this.getElement().value=s;this.check_()};goog.ui.LabelInput.prototype.getValue=function(){if(this.ffKeyRestoreValue_!=null)return this.ffKeyRestoreValue_;return this.hasChanged()?this.getElement().value:""};
goog.ui.LabelInput.prototype.check_=function(){this.attachEventsToForm_();if(!this.hasChanged()){if(!this.inFocusAndSelect_&&!this.hasFocus_)goog.dom.classes.add(this.getElement(),this.LABEL_CLASS_NAME);goog.Timer.callOnce(this.restoreLabel_,10,this)}else goog.dom.classes.remove(this.getElement(),this.LABEL_CLASS_NAME)};
goog.ui.LabelInput.prototype.focusAndSelect=function(){var hc=this.hasChanged();this.inFocusAndSelect_=true;this.getElement().focus();if(!hc)this.getElement().value=this.label_;this.getElement().select();goog.Timer.callOnce(this.focusAndSelect_,10,this)};goog.ui.LabelInput.prototype.focusAndSelect_=function(){this.inFocusAndSelect_=false};goog.ui.LabelInput.prototype.restoreLabel_=function(){if(this.getElement()&&!this.hasChanged()&&!this.hasFocus_)this.getElement().value=this.label_};goog.provide("kemia.controller.ToolbarFactory");goog.require("goog.array");goog.require("goog.dom");goog.require("goog.string");goog.require("goog.string.Unicode");goog.require("goog.style");goog.require("goog.ui.Component.State");goog.require("goog.ui.Container.Orientation");goog.require("goog.ui.ControlContent");goog.require("goog.ui.Option");goog.require("goog.ui.Toolbar");goog.require("goog.ui.ToolbarButton");goog.require("goog.ui.ToolbarColorMenuButton");goog.require("goog.ui.ToolbarMenuButton");
goog.require("goog.ui.ToolbarRenderer");goog.require("goog.ui.ToolbarSelect");goog.require("goog.userAgent");goog.require("goog.ui.LabelInput");goog.exportSymbol("kemia.controller.ToolbarFactory.makeButton",kemia.controller.ToolbarFactory.makeButton);kemia.controller.ToolbarFactory.getPrimaryFont=function(fontSpec){var i=fontSpec.indexOf(",");var fontName=(i!=-1?fontSpec.substring(0,i):fontSpec).toLowerCase();return goog.string.stripQuotes(fontName,"\"'")};
kemia.controller.ToolbarFactory.addFonts=function(button,fonts){goog.array.forEach(fonts,function(font){kemia.controller.ToolbarFactory.addFont(button,font.caption,font.value)})};kemia.controller.ToolbarFactory.addFont=function(button,caption,value){var id=kemia.controller.ToolbarFactory.getPrimaryFont(value);var option=new goog.ui.Option(caption,value,button.dom_);option.setId(id);button.addItem(option);option.getContentElement().style.fontFamily=value};
kemia.controller.ToolbarFactory.addFontSizes=function(button,sizes){goog.array.forEach(sizes,function(size){kemia.controller.ToolbarFactory.addFontSize(button,size.caption,size.value)})};
kemia.controller.ToolbarFactory.addFontSize=function(button,caption,value){var option=new goog.ui.Option(caption,value,button.dom_);option.setId(caption);button.addItem(option);var content=option.getContentElement();content.style.fontSize=kemia.controller.ToolbarFactory.getPxFromLegacySize(value)+"px";content.firstChild.style.height="1.1em"};kemia.controller.ToolbarFactory.getPxFromLegacySize=function(fontSize){return kemia.controller.ToolbarFactory.LEGACY_SIZE_TO_PX_MAP_[fontSize]||10};
kemia.controller.ToolbarFactory.getLegacySizeFromPx=function(px){return goog.array.lastIndexOf(kemia.controller.ToolbarFactory.LEGACY_SIZE_TO_PX_MAP_,px)};kemia.controller.ToolbarFactory.LEGACY_SIZE_TO_PX_MAP_=[10,10,13,16,18,24,32,48];kemia.controller.ToolbarFactory.addFormatOptions=function(button,formats){goog.array.forEach(formats,function(format){kemia.controller.ToolbarFactory.addFormatOption(button,format.caption,format.command)})};
kemia.controller.ToolbarFactory.addFormatOption=function(button,caption,tag){var option=new goog.ui.Option(button.dom_.createDom(goog.dom.TagName.DIV,null,caption),tag,button.dom_);option.setId(tag);button.addItem(option)};
kemia.controller.ToolbarFactory.makeToolbar=function(items,elem,opt_isRightToLeft){var domHelper=goog.dom.getDomHelper(elem);var toolbar=new goog.ui.Toolbar(goog.ui.ToolbarRenderer.getInstance(),goog.ui.Container.Orientation.HORIZONTAL,domHelper);var isRightToLeft=opt_isRightToLeft||goog.style.isRightToLeft(elem);toolbar.setRightToLeft(isRightToLeft);toolbar.setFocusable(false);for(var i=0,button;button=items[i];i++){button.setSupportedState(goog.ui.Component.State.FOCUSED,false);button.setRightToLeft(isRightToLeft);
toolbar.addChild(button,true)}toolbar.render(elem);return toolbar};kemia.controller.ToolbarFactory.makeButton=function(id,tooltip,caption,opt_classNames,opt_renderer,opt_domHelper){var button=new goog.ui.ToolbarButton(kemia.controller.ToolbarFactory.createContent_(caption,opt_classNames,opt_domHelper),opt_renderer,opt_domHelper);button.setId(id);button.setTooltip(tooltip);return button};
kemia.controller.ToolbarFactory.makeToggleButton=function(id,tooltip,caption,opt_classNames,opt_renderer,opt_domHelper){var button=kemia.controller.ToolbarFactory.makeButton(id,tooltip,caption,opt_classNames,opt_renderer,opt_domHelper);button.setSupportedState(goog.ui.Component.State.CHECKED,true);return button};
kemia.controller.ToolbarFactory.makeMenuButton=function(id,tooltip,caption,opt_classNames,opt_renderer,opt_domHelper){var button=new goog.ui.ToolbarMenuButton(kemia.controller.ToolbarFactory.createContent_(caption,opt_classNames,opt_domHelper),null,opt_renderer,opt_domHelper);button.setId(id);button.setTooltip(tooltip);return button};
kemia.controller.ToolbarFactory.makeSelectButton=function(id,tooltip,caption,opt_classNames,opt_renderer,opt_domHelper){var button=new goog.ui.ToolbarSelect(null,null,opt_renderer,opt_domHelper);if(opt_classNames)goog.array.forEach(opt_classNames.split(/\s+/),button.addClassName,button);button.addClassName(goog.getCssName("goog-toolbar-select"));button.setDefaultCaption(caption);button.setId(id);button.setTooltip(tooltip);return button};
kemia.controller.ToolbarFactory.makeColorMenuButton=function(id,tooltip,caption,opt_classNames,opt_renderer,opt_domHelper){var button=new goog.ui.ToolbarColorMenuButton(kemia.controller.ToolbarFactory.createContent_(caption,opt_classNames,opt_domHelper),null,opt_renderer,opt_domHelper);button.setId(id);button.setTooltip(tooltip);return button};
kemia.controller.ToolbarFactory.createContent_=function(caption,opt_classNames,opt_domHelper){if((!caption||caption=="")&&goog.userAgent.GECKO&&!goog.userAgent.isVersion("1.9a"))caption=goog.string.Unicode.NBSP;return(opt_domHelper||goog.dom.getDomHelper()).createDom(goog.dom.TagName.DIV,opt_classNames?{"class":opt_classNames}:null,caption)};goog.provide("kemia.controller.Command");kemia.controller.Command={};goog.provide("kemia.controller.plugins.Erase");goog.require("kemia.controller.Plugin");goog.require("goog.debug.Logger");kemia.controller.plugins.Erase=function(){kemia.controller.Plugin.call(this)};goog.inherits(kemia.controller.plugins.Erase,kemia.controller.Plugin);kemia.controller.plugins.Erase.COMMAND="erase";kemia.controller.plugins.Erase.prototype.isSupportedCommand=function(command){return command==kemia.controller.plugins.Erase.COMMAND};
kemia.controller.plugins.Erase.prototype.getTrogClassId=goog.functions.constant(kemia.controller.plugins.Erase.COMMAND);kemia.controller.plugins.Erase.prototype.logger=goog.debug.Logger.getLogger("kemia.controller.plugins.Erase");kemia.controller.plugins.Erase.prototype.execCommandInternal=function(command,value,active){this.logger.info("active: "+active);this.isActive=active};
kemia.controller.plugins.Erase.prototype.handleMouseDown=function(e){if(this.isActive){this.editorObject.dispatchBeforeChange();var target=this.editorObject.findTarget(e);if(target instanceof kemia.model.Atom)this.eraseAtom(target);if(target instanceof kemia.model.Bond)this.eraseBond(target);if(target instanceof kemia.model.Molecule)this.eraseMolecule(target);if(target instanceof goog.math.Coordinate)this.eraseArrowOrPlus(target);this.editorObject.dispatchChange()}};
kemia.controller.plugins.Erase.prototype.eraseAtom=function(atom){var molecule=atom.molecule;goog.array.forEach(atom.bonds.getValues(),function(bond){molecule.removeBond(bond)});molecule.removeAtom(atom);this.editorObject.setModels(this.editorObject.getModels())};
kemia.controller.plugins.Erase.prototype.eraseBond=function(bond){var molecule=bond.molecule;molecule.removeBond(bond);var fragments=molecule.getFragments();var reaction=molecule.reaction;if(reaction.isReactant(molecule))goog.array.forEach(fragments,function(mol){reaction.addReactant(mol)});else if(reaction.isProduct(molecule))goog.array.forEach(fragments,function(mol){reaction.addProduct(mol)});reaction.removeMolecule(molecule);this.editorObject.setModels(this.editorObject.getModels())};
kemia.controller.plugins.Erase.prototype.eraseMolecule=function(molecule){var reaction=molecule.reaction;reaction.removeMolecule(molecule);this.editorObject.setModels(this.editorObject.getModels())};kemia.controller.plugins.Erase.prototype.eraseArrowOrPlus=function(coord){var reaction=coord.reaction;reaction.removeArrowOrPlus(coord);this.editorObject.setModels(this.editorObject.getModels())};goog.provide("kemia.controller.plugins.ClearEditor");goog.require("kemia.controller.Plugin");goog.require("goog.functions");kemia.controller.plugins.ClearEditor=function(){kemia.controller.Plugin.call(this)};goog.inherits(kemia.controller.plugins.ClearEditor,kemia.controller.Plugin);kemia.controller.plugins.ClearEditor.COMMAND="clearEditor";kemia.controller.plugins.ClearEditor.prototype.getTrogClassId=goog.functions.constant(kemia.controller.plugins.ClearEditor.COMMAND);
kemia.controller.plugins.ClearEditor.prototype.isSupportedCommand=function(command){return command==kemia.controller.plugins.ClearEditor.COMMAND};kemia.controller.plugins.ClearEditor.prototype.execCommandInternal=function(command){this.editorObject.clear()};goog.provide("kemia.controller.plugins.Zoom");goog.require("goog.debug.Logger");kemia.controller.plugins.Zoom=function(){kemia.controller.Plugin.call(this)};goog.inherits(kemia.controller.plugins.Zoom,kemia.controller.Plugin);kemia.controller.plugins.Zoom.COMMAND={ZOOM_IN:"zoomIn",ZOOM_OUT:"zoomOut"};kemia.controller.plugins.Zoom.SUPPORTED_COMMANDS_=goog.object.transpose(kemia.controller.plugins.Zoom.COMMAND);kemia.controller.plugins.Zoom.prototype.getTrogClassId=goog.functions.constant(kemia.controller.plugins.Zoom.COMMAND);
kemia.controller.plugins.Zoom.prototype.isSupportedCommand=function(command){return command in kemia.controller.plugins.Zoom.SUPPORTED_COMMANDS_};kemia.controller.plugins.Zoom.prototype.execCommand=function(command,var_args){var current=this.editorObject.getScaleFactor();if(command==kemia.controller.plugins.Zoom.COMMAND.ZOOM_IN)this.editorObject.setScaleFactor(current*1.1);else if(command==kemia.controller.plugins.Zoom.COMMAND.ZOOM_OUT)this.editorObject.setScaleFactor(current*0.9);this.editorObject.setModels(this.editorObject.getModels())};
kemia.controller.plugins.Zoom.prototype.logger=goog.debug.Logger.getLogger("kemia.controller.plugins.Zoom");goog.provide("kemia.controller.plugins.BondEdit");goog.require("kemia.controller.Plugin");goog.require("goog.debug.Logger");goog.require("kemia.model.Bond");kemia.controller.plugins.BondEdit=function(){kemia.controller.Plugin.call(this)};goog.inherits(kemia.controller.plugins.BondEdit,kemia.controller.Plugin);kemia.controller.plugins.BondEdit.COMMAND="selectBond";kemia.controller.plugins.BondEdit.prototype.isSupportedCommand=function(command){return command==kemia.controller.plugins.BondEdit.COMMAND};
kemia.controller.plugins.BondEdit.prototype.getTrogClassId=goog.functions.constant(kemia.controller.plugins.BondEdit.COMMAND);kemia.controller.plugins.BondEdit.prototype.execCommandInternal=function(command,var_args){this.bond_type=arguments[1]};
kemia.controller.plugins.BondEdit.BOND_TYPES=[{caption:"Single",order:kemia.model.Bond.ORDER.SINGLE,stereo:kemia.model.Bond.STEREO.NOT_STEREO},{caption:"Double",order:kemia.model.Bond.ORDER.DOUBLE,stereo:kemia.model.Bond.STEREO.NOT_STEREO},{caption:"Triple",order:kemia.model.Bond.ORDER.TRIPLE,stereo:kemia.model.Bond.STEREO.NOT_STEREO},{caption:"Quadruple",order:kemia.model.Bond.ORDER.QUADRUPLE,stereo:kemia.model.Bond.STEREO.NOT_STEREO},{caption:"Single Up",order:kemia.model.Bond.ORDER.SINGLE,stereo:kemia.model.Bond.STEREO.UP},
{caption:"Single Down",order:kemia.model.Bond.ORDER.SINGLE,stereo:kemia.model.Bond.STEREO.DOWN},{caption:"Single Up or Down",order:kemia.model.Bond.ORDER.SINGLE,stereo:kemia.model.Bond.STEREO.UP_OR_DOWN}];kemia.controller.plugins.BondEdit.prototype.logger=goog.debug.Logger.getLogger("kemia.controller.plugins.BondEdit");kemia.controller.plugins.BondEdit.prototype.handleDoubleClick=function(e){this.logger.info("handleDoubleClick")};
kemia.controller.plugins.BondEdit.prototype.handleMouseDown=function(e){this.editorObject.dispatchBeforeChange();var target=this.editorObject.findTarget(e);if(target instanceof kemia.model.Atom){this.addBondToAtom(target);this.editorObject.setModels(this.editorObject.getModels())}if(target instanceof kemia.model.Bond)if(this.bond_type){this.replaceBond(target);this.editorObject.setModels(this.editorObject.getModels())}else{if(target._last_click)if(goog.now()-target._last_click<1E3){this.toggleBondType(target);
this.editorObject.setModels(this.editorObject.getModels())}else this.drag(e,target);target._last_click=goog.now()}if(target==undefined&&this.bond_type){this.createMolecule(kemia.controller.ReactionEditor.getMouseCoords(e));this.editorObject.setModels(this.editorObject.getModels())}this.editorObject.dispatchChange()};
kemia.controller.plugins.BondEdit.prototype.createMolecule=function(pos){var coord=this.editorObject.reactionRenderer.transform.createInverse().transformCoords([pos])[0];var atom=new kemia.model.Atom("C",coord.x,coord.y);var molecule=new kemia.model.Molecule;molecule.addAtom(atom);this.addBondToAtom(atom);var reaction;if(this.editorObject.getModels().length>0){reaction=this.editorObject.getModels()[0];if(reaction.arrows.length>0){var arrow_pos=reaction.arrows[0];if(arrow_pos.x>coord.x)reaction.addReactant(molecule);
else reaction.addProduct(molecule)}reaction.addReactant(molecule)}};
kemia.controller.plugins.BondEdit.prototype.toggleBondType=function(bond){if(bond.stereo==kemia.model.Bond.STEREO.NOT_STEREO){var order=kemia.model.Bond.ORDER.SINGLE;if(bond.order==kemia.model.Bond.ORDER.SINGLE)order=kemia.model.Bond.ORDER.DOUBLE;else if(bond.order==kemia.model.Bond.ORDER.DOUBLE)order=kemia.model.Bond.ORDER.TRIPLE;var new_bond=new kemia.model.Bond(bond.target,bond.source,order,bond.stereo);var molecule=bond.molecule;molecule.removeBond(bond);molecule.addBond(new_bond)}};
kemia.controller.plugins.BondEdit.prototype.replaceBond=function(bond){if(this.bond_type.stereo!=kemia.model.Bond.STEREO.NOT_STEREO&&bond.stereo==this.bond_type.stereo)var new_bond=new kemia.model.Bond(bond.target,bond.source,this.bond_type.order,this.bond_type.stereo);else var new_bond=new kemia.model.Bond(bond.source,bond.target,this.bond_type.order,this.bond_type.stereo);var molecule=bond.molecule;molecule.removeBond(bond);molecule.addBond(new_bond)};
kemia.controller.plugins.BondEdit.prototype.addBondToAtom=function(atom){if(this.bond_type){var angles=goog.array.map(atom.bonds.getValues(),function(bond){return(new kemia.math.Line(atom.coord,bond.otherAtom(atom).coord)).getTheta()});var new_angle;if(angles.length==0)new_angle=0;if(angles.length==1)if(angles[0]>0)new_angle=angles[0]-Math.PI*2/3;else new_angle=angles[0]+Math.PI*2/3;else if(angles.length==2){var sum_angles=goog.array.reduce(angles,function(r,v){return r+v},0);new_angle=Math.PI+sum_angles/
angles.length}if(new_angle!=undefined){var new_atom=new kemia.model.Atom("C",atom.coord.x+Math.cos(new_angle)*1.25,atom.coord.y+Math.sin(new_angle)*1.25);var new_bond=new kemia.model.Bond(atom,new_atom,this.bond_type.order,this.bond_type.stereo);var molecule=atom.molecule;molecule.addAtom(new_atom);molecule.addBond(new_bond)}}};
kemia.controller.plugins.BondEdit.prototype.drag=function(e,bond){var d=new goog.fx.Dragger(this.editorObject.getOriginalElement());d._prevX=e.clientX;d._prevY=e.clientY;d.bond=bond;d.editor=this.editorObject;d.addEventListener(goog.fx.Dragger.EventType.DRAG,function(e){d.bond.molecule.group.clear();var trans=new goog.graphics.AffineTransform.getTranslateInstance(e.clientX-d._prevX,e.clientY-d._prevY);var coords=d.editor.reactionRenderer.transform.createInverse().transformCoords([new goog.math.Coordinate(e.clientX,
e.clientY),new goog.math.Coordinate(d._prevX,d._prevY)]);var diff=goog.math.Coordinate.difference(coords[0],coords[1]);bond.source.coord=goog.math.Coordinate.sum(bond.source.coord,diff);bond.target.coord=goog.math.Coordinate.sum(bond.target.coord,diff);d.editor.reactionRenderer.moleculeRenderer.render(bond.molecule,d.editor.reactionRenderer.transform);d._prevX=e.clientX;d._prevY=e.clientY});d.addEventListener(goog.fx.Dragger.EventType.END,function(e){d.editor.setModels(d.editor.getModels());d.dispose()});
d.startDrag(e)};goog.provide("kemia.controller.plugins.Highlight");goog.require("kemia.controller.Plugin");goog.require("goog.functions");goog.require("goog.debug.Logger");kemia.controller.plugins.Highlight=function(){kemia.controller.Plugin.call(this)};goog.inherits(kemia.controller.plugins.Highlight,kemia.controller.Plugin);kemia.controller.plugins.Highlight.prototype.getTrogClassId=goog.functions.constant("kemia.controller.plugins.Highlight");kemia.controller.plugins.Highlight.prototype.logger=goog.debug.Logger.getLogger("kemia.controller.plugins.Highlight");
kemia.controller.plugins.Highlight.prototype.handleMouseMove=function(e){var target=this.editorObject.findTarget(e);if(e.currentTarget.highlightGroup)e.currentTarget.highlightGroup.clear();if(target instanceof kemia.model.Atom)if(!e.currentTarget.highlightGroup)e.currentTarget.highlightGroup=this.highlightAtom(target);else e.currentTarget.highlightGroup=this.highlightAtom(target,e.currentTarget.highlightGroup);else if(target instanceof kemia.model.Bond)if(!e.currentTarget.highlightGroup)e.currentTarget.highlightGroup=
this.highlightBond(target);else e.currentTarget.highlightGroup=this.highlightBond(target,e.currentTarget.highlightGroup);else if(target instanceof goog.math.Coordinate)if(!e.currentTarget.highlightGroup)e.currentTarget.highlightGroup=this.highlightArrowOrPlus(target);else e.currentTarget.highlightGroup=this.highlightArrowOrPlus(target,e.currentTarget.highlightGroup);else e.currentTarget.highlightGroup=undefined};
kemia.controller.plugins.Highlight.prototype.highlightBond=function(bond,opt_group){return this.editorObject.reactionRenderer.moleculeRenderer.bondRendererFactory.get(bond).highlightOn(bond,opt_group)};kemia.controller.plugins.Highlight.prototype.highlightAtom=function(atom,opt_group){return this.editorObject.reactionRenderer.moleculeRenderer.atomRenderer.highlightOn(atom,opt_group)};
kemia.controller.plugins.Highlight.prototype.highlightMolecule=function(molecule,opt_group){return this.editorObject.reactionRenderer.moleculeRenderer.highlightOn(molecule,opt_group)};kemia.controller.plugins.Highlight.prototype.highlightArrowOrPlus=function(coord,opt_group){return this.editorObject.reactionRenderer.arrowRenderer.highlightOn(coord,opt_group)};goog.provide("kemia.controller.plugins.AtomEdit");goog.require("kemia.controller.Plugin");goog.require("goog.debug.Logger");kemia.controller.plugins.AtomEdit=function(){kemia.controller.Plugin.call(this)};goog.inherits(kemia.controller.plugins.AtomEdit,kemia.controller.Plugin);kemia.controller.plugins.AtomEdit.COMMAND="selectSymbol";kemia.controller.plugins.AtomEdit.prototype.isSupportedCommand=function(command){return command==kemia.controller.plugins.AtomEdit.COMMAND};
kemia.controller.plugins.AtomEdit.prototype.getTrogClassId=goog.functions.constant(kemia.controller.plugins.AtomEdit.COMMAND);kemia.controller.plugins.AtomEdit.prototype.execCommandInternal=function(command,var_args){this.symbol=arguments[1]};kemia.controller.plugins.AtomEdit.prototype.logger=goog.debug.Logger.getLogger("kemia.controller.plugins.AtomEdit");
kemia.controller.plugins.AtomEdit.prototype.handleMouseDown=function(e){var target=this.editorObject.findTarget(e);if(target instanceof kemia.model.Atom){var atom=target;this.editorObject.dispatchBeforeChange();if(this.symbol&&this.symbol!=atom.symbol)this.setAtomSymbol(e,atom);else this.drag(e,atom);this.editorObject.setModels(this.editorObject.getModels());this.editorObject.dispatchChange()}};
kemia.controller.plugins.AtomEdit.prototype.handleMouseUp=function(e){var targets=goog.array.filter(this.editorObject.findTargetList(e),function(obj){return obj instanceof kemia.model.Atom&&obj!==this.dragSource},this);var target=targets.length>0?targets[0]:undefined;if(this.dragSource&&target instanceof kemia.model.Atom){this.editorObject.dispatchBeforeChange();kemia.controller.plugins.AtomEdit.mergeMolecules(this.dragSource,target);this.dragSource=undefined;this.editorObject.setModels(this.editorObject.getModels());
this.editorObject.dispatchChange()}};
kemia.controller.plugins.AtomEdit.mergeMolecules=function(source_atom,target_atom){var source_molecule=source_atom.molecule;var target_molecule=target_atom.molecule;goog.array.forEach(target_atom.bonds.getValues(),function(bond){var new_bond=bond.clone();target_atom==new_bond.source?(new_bond.source=source_atom):(new_bond.target=source_atom);target_molecule.addBond(new_bond);target_molecule.removeBond(bond)});target_molecule.removeAtom(target_atom);goog.array.forEach(source_molecule.atoms,function(atom){target_molecule.addAtom(atom)});
goog.array.forEach(source_molecule.bonds,function(bond){var new_bond=bond.clone();new_bond.molecule=undefined;target_molecule.addBond(new_bond)});goog.array.forEach(source_molecule.atoms,function(atom){source_molecule.removeAtom(atom)});goog.array.forEach(source_molecule.bonds,function(bond){source_molecule.removeBond(bond)});source_molecule.reaction.removeMolecule(source_molecule);delete source_molecule;return target_molecule};
kemia.controller.plugins.AtomEdit.prototype.setAtomSymbol=function(e,atom){var new_atom=new kemia.model.Atom(this.symbol,atom.coord.x,atom.coord.y);var molecule=atom.molecule;goog.array.forEach(atom.bonds.getValues(),function(bond){var new_bond=bond.clone();new_bond.molecule=undefined;atom==new_bond.source?(new_bond.source=new_atom):(new_bond.target=new_atom);molecule.addBond(new_bond);molecule.removeBond(bond)});molecule.removeAtom(atom);molecule.addAtom(new_atom)};
kemia.controller.plugins.AtomEdit.prototype.drag=function(e,atom){this.dragSource=atom;var d=new goog.fx.Dragger(this.editorObject.getOriginalElement());d._prevX=e.clientX;d._prevY=e.clientY;d.atom=atom;d.editor=this.editorObject;d.addEventListener(goog.fx.Dragger.EventType.DRAG,function(e){d.atom.molecule.group.clear();var trans=new goog.graphics.AffineTransform.getTranslateInstance(e.clientX-d._prevX,e.clientY-d._prevY);var coords=d.editor.reactionRenderer.transform.createInverse().transformCoords([new goog.math.Coordinate(e.clientX,
e.clientY),new goog.math.Coordinate(d._prevX,d._prevY)]);var diff=goog.math.Coordinate.difference(coords[0],coords[1]);atom.coord=goog.math.Coordinate.sum(atom.coord,diff);d.editor.reactionRenderer.moleculeRenderer.render(d.atom.molecule,d.editor.reactionRenderer.transform);d._prevX=e.clientX;d._prevY=e.clientY});d.addEventListener(goog.fx.Dragger.EventType.END,function(e){d.editor.setModels(d.editor.getModels());d.dispose()});d.startDrag(e)};goog.provide("goog.json");goog.provide("goog.json.Serializer");goog.json.isValid_=function(s){if(/^\s*$/.test(s))return false;var backslashesRe=/\\["\\\/bfnrtu]/g;var simpleValuesRe=/"[^"\\\n\r\u2028\u2029\x00-\x08\x10-\x1f\x80-\x9f]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g;var openBracketsRe=/(?:^|:|,)(?:[\s\u2028\u2029]*\[)+/g;var remainderRe=/^[\],:{}\s\u2028\u2029]*$/;return remainderRe.test(s.replace(backslashesRe,"@").replace(simpleValuesRe,"]").replace(openBracketsRe,""))};
goog.json.parse=function(s){var o=String(s);if(goog.json.isValid_(o))try{return eval("("+o+")")}catch(ex){}throw Error("Invalid JSON string: "+o);};goog.json.unsafeParse=function(s){return eval("("+s+")")};goog.json.serialize=function(object){return(new goog.json.Serializer).serialize(object)};goog.json.Serializer=function(){};goog.json.Serializer.prototype.serialize=function(object){var sb=[];this.serialize_(object,sb);return sb.join("")};
goog.json.Serializer.prototype.serialize_=function(object,sb){switch(typeof object){case "string":this.serializeString_(object,sb);break;case "number":this.serializeNumber_(object,sb);break;case "boolean":sb.push(object);break;case "undefined":sb.push("null");break;case "object":if(object==null){sb.push("null");break}if(goog.isArray(object)){this.serializeArray_(object,sb);break}this.serializeObject_(object,sb);break;case "function":break;default:throw Error("Unknown type: "+typeof object);}};
goog.json.Serializer.charToJsonCharCache_={'"':'\\"',"\\":"\\\\","/":"\\/","\u0008":"\\b","\u000c":"\\f","\n":"\\n","\r":"\\r","\t":"\\t","\u000b":"\\u000b"};goog.json.Serializer.charsToReplace_=/\uffff/.test("\uffff")?/[\\\"\x00-\x1f\x7f-\uffff]/g:/[\\\"\x00-\x1f\x7f-\xff]/g;
goog.json.Serializer.prototype.serializeString_=function(s,sb){sb.push('"',s.replace(goog.json.Serializer.charsToReplace_,function(c){if(c in goog.json.Serializer.charToJsonCharCache_)return goog.json.Serializer.charToJsonCharCache_[c];var cc=c.charCodeAt(0);var rv="\\u";if(cc<16)rv+="000";else if(cc<256)rv+="00";else if(cc<4096)rv+="0";return goog.json.Serializer.charToJsonCharCache_[c]=rv+cc.toString(16)}),'"')};
goog.json.Serializer.prototype.serializeNumber_=function(n,sb){sb.push(isFinite(n)&&!isNaN(n)?n:"null")};goog.json.Serializer.prototype.serializeArray_=function(arr,sb){var l=arr.length;sb.push("[");var sep="";for(var i=0;i<l;i++){sb.push(sep);this.serialize_(arr[i],sb);sep=","}sb.push("]")};
goog.json.Serializer.prototype.serializeObject_=function(obj,sb){sb.push("{");var sep="";for(var key in obj)if(obj.hasOwnProperty(key)){var value=obj[key];if(typeof value!="function"){sb.push(sep);this.serializeString_(key,sb);sb.push(":");this.serialize_(value,sb);sep=","}}sb.push("}")};goog.provide("kemia.controller.plugins.UndoRedo");goog.require("goog.debug.Logger");goog.require("goog.json");kemia.controller.plugins.UndoRedo=function(){kemia.controller.Plugin.call(this);this.maxUndoDepth_=100;this.undoStack_=[];this.redoStack_=[];this.currentState_=null};goog.inherits(kemia.controller.plugins.UndoRedo,kemia.controller.Plugin);kemia.controller.plugins.UndoRedo.COMMAND={UNDO:"undo",REDO:"redo"};kemia.controller.plugins.UndoRedo.SUPPORTED_COMMANDS_=goog.object.transpose(kemia.controller.plugins.UndoRedo.COMMAND);
kemia.controller.plugins.UndoRedo.prototype.getTrogClassId=function(){return"UndoRedo"};kemia.controller.plugins.UndoRedo.prototype.isSupportedCommand=function(command){return command in kemia.controller.plugins.UndoRedo.SUPPORTED_COMMANDS_};kemia.controller.plugins.UndoRedo.prototype.execCommandInternal=function(command){if(command==kemia.controller.plugins.UndoRedo.COMMAND.UNDO)this.undo();else if(command==kemia.controller.plugins.UndoRedo.COMMAND.REDO)this.redo()};
kemia.controller.plugins.UndoRedo.prototype.clearHistory=function(){if(this.undoStack_.length>0||this.redoStack_.length>0){this.undoStack_.length=0;this.redoStack_.length=0;this.dispatchStateChange_()}};kemia.controller.plugins.UndoRedo.prototype.handleBeforeChange_=function(e){var editorObj=e.target;this.updateCurrentState_(editorObj)};
kemia.controller.plugins.UndoRedo.prototype.updateCurrentState_=function(editorObj){var content=editorObj.getModels();var serialized="[]";if(content)serialized=goog.json.serialize(goog.array.map(editorObj.getModels(),kemia.io.json.reactionToJson));var currentState=this.currentState_;if(currentState!=serialized)this.addState(currentState);this.currentState_=serialized};
kemia.controller.plugins.UndoRedo.prototype.addState=function(state){this.undoStack_.push(state);if(this.undoStack_.length>this.maxUndoDepth_){this.undoStack_.shift();var redoLength=this.redoStack_.length;this.redoStack_.length=0;this.dispatchEvent({type:kemia.controller.plugins.UndoRedo.EventType.STATE_ADDED,state:state});if(this.undoStack_.length==1||redoLength)this.dispatchStateChange_()}};kemia.controller.plugins.UndoRedo.prototype.dispatchStateChange_=function(){this.dispatchEvent(kemia.controller.plugins.UndoRedo.EventType.STATE_CHANGE)};
kemia.controller.plugins.UndoRedo.prototype.undo=function(){this.logger.info("undo");this.shiftState_(this.undoStack_,this.redoStack_)};kemia.controller.plugins.UndoRedo.prototype.redo=function(){this.shiftState_(this.redoStack_,this.undoStack_)};kemia.controller.plugins.UndoRedo.prototype.hasUndoState=function(){return this.undoStack_.length>0};kemia.controller.plugins.UndoRedo.prototype.hasRedoState=function(){return this.redoStack_.length>0};
kemia.controller.plugins.UndoRedo.prototype.shiftState_=function(fromStack,toStack){this.logger.info("shiftState");this.logger.info(" fromStack.length "+fromStack.length);this.logger.info(" toStack.length "+toStack.length);if(fromStack.length){var state=fromStack.pop();toStack.push(state);this.editorObject.setModels(goog.array.map(goog.json.unsafeParse(state),kemia.io.json.readReaction));this.logger.info(" fromStack.length "+fromStack.length);this.logger.info(" toStack.length "+toStack.length);
if(fromStack.length==0||toStack.length==1)this.dispatchStateChange_()}};kemia.controller.plugins.UndoRedo.prototype.enable=function(editorObject){kemia.controller.plugins.UndoRedo.superClass_.enable.call(this,editorObject);this.eventHandler=new goog.events.EventHandler(this);this.eventHandler.listen(editorObject,kemia.controller.ReactionEditor.EventType.BEFORECHANGE,this.handleBeforeChange_);this.updateCurrentState_(editorObject)};
kemia.controller.plugins.UndoRedo.prototype.disable=function(editorObject){editorObject.clearDelayedChange();this.eventHandler.dispose();this.eventHandler=null;this.currentState_=null};kemia.controller.plugins.UndoRedo.prototype.disposeInternal=function(){goog.editor.plugins.UndoRedo.superClass_.disposeInternal.call(this);this.eventHandler.dispose();this.editorObject=null};
kemia.controller.plugins.UndoRedo.EventType={STATE_CHANGE:"state_change",STATE_ADDED:"state_added",BEFORE_UNDO:"before_undo",BEFORE_REDO:"before_redo"};kemia.controller.plugins.UndoRedo.prototype.logger=goog.debug.Logger.getLogger("kemia.controller.plugins.UndoRedo");goog.provide("kemia.controller.plugins.ArrowPlusEdit");goog.require("kemia.controller.Plugin");goog.require("goog.debug.Logger");kemia.controller.plugins.ArrowPlusEdit=function(){this.activeCommand={};kemia.controller.Plugin.call(this)};goog.inherits(kemia.controller.plugins.ArrowPlusEdit,kemia.controller.Plugin);kemia.controller.plugins.ArrowPlusEdit.COMMAND={EDIT_ARROW:"editArrow",EDIT_PLUS:"editPlus"};kemia.controller.plugins.ArrowPlusEdit.SUPPORTED_COMMANDS_=goog.object.transpose(kemia.controller.plugins.ArrowPlusEdit.COMMAND);
kemia.controller.plugins.ArrowPlusEdit.prototype.isSupportedCommand=function(command){return command in kemia.controller.plugins.ArrowPlusEdit.SUPPORTED_COMMANDS_};kemia.controller.plugins.ArrowPlusEdit.prototype.getTrogClassId=goog.functions.constant("ArrowPlusEdit");kemia.controller.plugins.ArrowPlusEdit.prototype.execCommandInternal=function(command,value,active){this.logger.info(command+" active: "+active);this.activeCommand[command]=active};
kemia.controller.plugins.ArrowPlusEdit.prototype.logger=goog.debug.Logger.getLogger("kemia.controller.plugins.ArrowPlusEdit");kemia.controller.plugins.ArrowPlusEdit.prototype.handleArrowMouseDown=function(e){if(this.activeCommand[kemia.controller.plugins.ArrowPlusEdit.COMMAND.EDIT_ARROW]){this.editorObject.dispatchBeforeChange();this.dragArrow(e);this.editorObject.dispatchChange()}};
kemia.controller.plugins.ArrowPlusEdit.prototype.handleMouseDown=function(e){if(this.activeCommand[kemia.controller.plugins.ArrowPlusEdit.COMMAND.EDIT_ARROW]){this.editorObject.dispatchBeforeChange();var trans=this.editorObject.reactionRenderer.moleculeRenderer.transform.createInverse();var coords=trans.transformCoords([new goog.math.Coordinate(e.offsetX,e.offsetY)]);this.editorObject.getModels()[0].addArrow(coords[0]);this.editorObject.setModels(this.editorObject.getModels());this.editorObject.dispatchChange()}else if(this.activeCommand[kemia.controller.plugins.ArrowPlusEdit.COMMAND.EDIT_PLUS]){this.editorObject.dispatchBeforeChange();
var trans=this.editorObject.reactionRenderer.moleculeRenderer.transform.createInverse();var coords=trans.transformCoords([new goog.math.Coordinate(e.offsetX,e.offsetY)]);this.editorObject.getModels()[0].addPlus(coords[0]);this.editorObject.setModels(this.editorObject.getModels());this.editorObject.dispatchChange()}};
kemia.controller.plugins.ArrowPlusEdit.prototype.dragArrow=function(e){this.logger.info("dragArrow");var coord=e.coord;var d=new goog.fx.Dragger(e.group);d._prevX=e.clientX;d._prevY=e.clientY;d._startX=e.clientX;d._startY=e.clientY;d.coord=coord;d.group=e.group;d.addEventListener(goog.fx.Dragger.EventType.DRAG,function(e){var trans=d.group.transform;var newX=e.clientX-d._prevX+trans.getTranslateX();var newY=e.clientY-d._prevY+trans.getTranslateY();d.group.setTransformation(newX,newY,0,0,0);d._prevX=
e.clientX;d._prevY=e.clientY});d.addEventListener(goog.fx.Dragger.EventType.END,function(e){d.dispose()});d.startDrag(e)};goog.provide("kemia.ring.Ring");goog.require("goog.array");goog.require("goog.structs.Map");kemia.ring.Ring=function(_atoms,_bonds){this.atoms=_atoms;this.bonds=_bonds;var avgX=0;var avgY=0;for(var j=0,jl=_atoms.length;j<jl;j++){avgX+=_atoms[j].coord.x;avgY+=_atoms[j].coord.y}this.ringCenter=new goog.math.Coordinate(avgX/_atoms.length,avgY/_atoms.length)};goog.provide("kemia.ring.Hanser");goog.require("goog.structs.Set");goog.require("goog.structs.Set");goog.require("goog.array");goog.require("kemia.ring.Ring");kemia.ring.Hanser=function(){};
kemia.ring.Hanser.findRings=function(_molecule,maxLen){var molecule=_molecule;var atomOnlyRings=[];graph=new kemia.ring.PathGraph(molecule);for(var i=0,il=molecule.countAtoms();i<il;i++){var edges=graph.remove(molecule.getAtom(i),maxLen);for(var j=0;j<edges.length;j++){edge=edges[j];atom_ring=edge.atoms;goog.array.removeAt(atom_ring,atom_ring.length-1);for(var k=0,lk=atom_ring.length;k<lk;k++)atom_ring[k]=molecule.indexOfAtom(atom_ring[k]);atomOnlyRings.push(atom_ring)}}goog.array.sort(atomOnlyRings);
return atomOnlyRings};kemia.ring.Hanser.createRing=function(atoms,molecule){var bonds=new Array;for(var i=0,il=atoms.length-1;i<il;i++){bond=molecule.findBond(atoms[i],atoms[i+1]);if(bond!=null)bonds.push(bond)}goog.array.removeAt(atoms,atoms.length-1);var ring=new kemia.ring.Ring(atoms,bonds);return ring};
kemia.ring.PathGraph=function(molecule){this.edges=new Array;this.atoms=new Array;for(var i=0,il=molecule.countBonds();i<il;i++){bond=molecule.getBond(i);var edge=[bond.source,bond.target];this.edges.push(new kemia.ring.PathEdge(edge))}for(var i=0,il=molecule.countAtoms();i<il;i++)this.atoms.push(molecule.getAtom(i))};
kemia.ring.PathGraph.prototype.remove=function(atom,maxLen){var oldEdges=this.getEdges(atom);result=new Array;for(var i=0,il=oldEdges.length;i<il;i++)if(oldEdges[i].isCycle())result.push(oldEdges[i]);for(var i=0,il=result.length;i<il;i++){if(goog.array.contains(oldEdges,result[i]))goog.array.remove(oldEdges,result[i]);if(goog.array.contains(this.edges,result[i]))goog.array.remove(this.edges,result[i])}newEdges=this.spliceEdges(oldEdges);for(var i=0,il=oldEdges.length;i<il;i++)if(goog.array.contains(this.edges,
oldEdges[i]))goog.array.remove(this.edges,oldEdges[i]);for(var i=0,il=newEdges.length;i<il;i++)if(!goog.array.contains(this.edges,newEdges[i])&&newEdges[i].atoms.length<=maxLen+1)this.edges.push(newEdges[i]);goog.array.remove(this.atoms,atom);return result};
kemia.ring.PathGraph.prototype.getEdges=function(atom){var result=new Array;for(var i=0,il=this.edges.length;i<il;i++){edge=this.edges[i];if(edge.isCycle()){if(goog.array.contains(edge.atoms,atom))result.push(edge)}else{var lastAtomPos=edge.atoms.length-1;if(edge.atoms[0]==atom||edge.atoms[lastAtomPos]==atom)result.push(edge)}}return result};
kemia.ring.PathGraph.prototype.spliceEdges=function(_edges){var result=new Array;for(var i=0,il=_edges.length;i<il;i++)for(var j=i+1;j<il;j++){spliced=_edges[j].splice(_edges[i]);if(spliced!=null)result.push(spliced)}return result};kemia.ring.PathEdge=function(_atoms){this.atoms=_atoms};kemia.ring.PathEdge.prototype.isCycle=function(){var lastAtomPos=this.atoms.length-1;return this.atoms.length>2&&this.atoms[0]==this.atoms[lastAtomPos]};
kemia.ring.PathEdge.prototype.splice=function(other){intersection=this.getIntersection(other.atoms);newAtoms=new Array;for(var i=0,il=this.atoms.length;i<il;i++)newAtoms.push(this.atoms[i]);if(this.atoms[0]==intersection)newAtoms.reverse();if(other.atoms[0]==intersection)for(var i=1,il=other.atoms.length;i<il;i++)newAtoms.push(other.atoms[i]);else for(var i=other.atoms.length-2;i>=0;i--)newAtoms.push(other.atoms[i]);if(!this.isRealPath(newAtoms))return null;return new kemia.ring.PathEdge(newAtoms)};
kemia.ring.PathEdge.prototype.isRealPath=function(atoms){for(var i=1,il=atoms.length-1;i<il;i++)for(var j=1;j<il;j++){if(i==j)continue;if(atoms[i]==atoms[j])return false}return true};
kemia.ring.PathEdge.prototype.getIntersection=function(others){var lastAtomPos=this.atoms.length-1;var lastOtherPos=others.length-1;if(this.atoms[lastAtomPos]==others[0]||this.atoms[lastAtomPos]==others[lastOtherPos])return this.atoms[lastAtomPos];if(this.atoms[0]==others[0]||this.atoms[0]==others[lastOtherPos])return this.atoms[0];throw"Couldn't splice - no intersection";};goog.provide("kemia.ring.SSSR");goog.require("goog.structs.Set");goog.require("goog.array");goog.require("kemia.ring.Ring");
(function(){function deepCopy(arr){var newArray=[];for(var i=0,li=arr.length;i<li;i++){var item=arr[i];if(item instanceof Array)newArray.push(deepCopy(item));else newArray.push(item)}return newArray}function matrixToHTML(matrix){var text="";var n=matrix.length;for(var i=0;i<n;i++){for(var j=0;j<n;j++)text+=JSON.stringify(matrix[i][j])+" ";text+="<br>"}return text}function createEmptyMatrix(n){var matrix=[];for(var i=0;i<n;i++){var row=[];for(var j=0;j<n;j++)row.push(0);matrix.push(row)}return matrix}
function createWeightMatrix(molecule,n){var matrix=[];for(var i=0;i<n;i++){var row=[];for(var j=0;j<n;j++)if(i==j)row.push(0);else if(molecule.findBond(molecule.getAtom(i),molecule.getAtom(j)))row.push(1);else row.push(99999999);matrix.push(row)}return matrix}function createEmptyPIDMatrix(n){var matrix=[];for(var i=0;i<n;i++){var row=[];for(var j=0;j<n;j++)row.push([]);matrix.push(row)}return matrix}function createPIDMatrix(molecule,n){var matrix=[];for(var i=0;i<n;i++){var row=[];for(var j=0;j<n;j++){var beginAtom=
molecule.getAtom(i);var endAtom=molecule.getAtom(j);var bond=molecule.findBond(beginAtom,endAtom);if(bond)row.push([[molecule.indexOfBond(bond)]]);else row.push([])}matrix.push(row)}return matrix}function appendPath(lhs,p1,p2){if(!lhs.length)lhs[0]=p1[0].concat(p2[0]);else lhs.push(p1[0].concat(p2[0]))}function makePIDMatrixes(molecule){var n=molecule.countAtoms();var D=createWeightMatrix(molecule,n);var Pe1=createPIDMatrix(molecule,n);var Pe2=createEmptyPIDMatrix(n);var lastD=D;for(var k=0;k<n;k++)for(var i=
0;i<n;i++)for(var j=0;j<n;j++){var lastPathLength=lastD[i][j];var pathLength=lastD[i][k]+lastD[k][j];var path1=Pe1[i][k];var path2=Pe1[k][j];if(pathLength==1E8)continue;if(lastPathLength>pathLength){if(lastPathLength==pathLength+1)Pe2[i][j]=deepCopy(Pe1[i][j]);else Pe2[i][j]=[];D[i][j]=pathLength;Pe1[i][j]=[path1[0].concat(path2[0])]}else if(lastPathLength==pathLength){if(path1.length&&path2.length)appendPath(Pe1[i][j],path1,path2)}else if(lastPathLength==pathLength-1)appendPath(Pe2[i][j],path1,path2);
else D[i][j]=lastD[i][j]}return{D:D,Pe1:Pe1,Pe2:Pe2}}function sortByCnum(a,b){return a.Cnum-b.Cnum}function makeCandidateSet(D,Pe1,Pe2){var n=D.length;var Cset=[];for(var i=0;i<n;i++)for(var j=0;j<n;j++)if(D[i][j]==0||Pe1[i][j].length==1&&Pe2[i][j].length==0)continue;else{var Cnum;if(Pe2[i][j].length)Cnum=2*(D[i][j]+0.5);else Cnum=2*D[i][j];Cset.push({Cnum:Cnum,Pe1:Pe1[i][j],Pe2:Pe2[i][j]})}Cset.sort(sortByCnum);return Cset}kemia.ring.SSSR.isCandidateInSet=function(C,Csssr,valences,ringCount){for(var i=
0,li=Csssr.length;i<li;i++){var sssr=Csssr[i];if(C.length>=sssr.length){var candidateContainsRing=true;for(var j=0,lj=sssr.length;j<lj;j++)if(!goog.array.contains(C,sssr[j]))candidateContainsRing=false;if(candidateContainsRing)return true}for(j=0,lj=C.length;j<lj;j++)if(goog.array.contains(sssr,C[j]))ringCount[j]++}var isNewRing=false;for(j=0,lj=C.length;j<lj;j++)if(ringCount[C[j]]<valences[C[j]]-1)isNewRing=true;if(isNewRing){for(j=0,lj=C.length;j<lj;j++)ringCount[C[j]]++;return false}return true};
function bondRingToAtomRing(ring,molecule){var atoms=[];for(var i=0,li=ring.length;i<li;i++){var bond=molecule.getBond(ring[i]);var sourceIndex=molecule.indexOfAtom(bond.source);var targetIndex=molecule.indexOfAtom(bond.target);if(!goog.array.contains(atoms,sourceIndex))atoms.push(sourceIndex);if(!goog.array.contains(atoms,targetIndex))atoms.push(targetIndex)}return atoms}function processCandidate(bondIndexes,Csssr,molecule,valences,ringCount){var atomIndexes=bondRingToAtomRing(bondIndexes,molecule);
if(bondIndexes.length!==atomIndexes.length)return;if(!kemia.ring.SSSR.isCandidateInSet(atomIndexes,Csssr,valences,ringCount))Csssr.push(atomIndexes)}function candidateSearch(Cset,nsssr,molecule,D){var Csssr=[];var valences=[];for(var i=0,li=molecule.countAtoms();i<li;i++)valences.push(molecule.getAtom(i).countBonds());var ringCount=goog.array.repeat(0,molecule.countAtoms());for(var i=0,li=Cset.length;i<li;i++){var set=Cset[i];if(set.Cnum%2)for(var j=0,lj=set.Pe2.length;j<lj;j++){var bondIndexes=set.Pe1[0].concat(set.Pe2[j]);
processCandidate(bondIndexes,Csssr,molecule,valences,ringCount);if(Csssr.length==nsssr)return Csssr}else for(var j=0,lj=set.Pe1.length-1;j<lj;j++){var bondIndexes=set.Pe1[j].concat(set.Pe1[j+1]);processCandidate(bondIndexes,Csssr,molecule,valences,ringCount);if(Csssr.length==nsssr)return Csssr}}return Csssr}function sortByPath(atomIndexes,molecule){var pathAtomIndexes=[atomIndexes[0]];var beginAtom=molecule.getAtom(atomIndexes[0]);var l=0;while(atomIndexes.length!=pathAtomIndexes.length){l++;if(l>
1E3)break;for(var i=1,li=atomIndexes.length;i<li;i++){var iAtom=molecule.getAtom(pathAtomIndexes[pathAtomIndexes.length-1]);var jAtom=molecule.getAtom(atomIndexes[i]);if(goog.array.contains(pathAtomIndexes,atomIndexes[i]))continue;if(molecule.findBond(iAtom,jAtom))pathAtomIndexes.push(atomIndexes[i]);else if(molecule.findBond(beginAtom,jAtom))goog.array.insertAt(pathAtomIndexes,atomIndexes[i],0)}}return pathAtomIndexes}kemia.ring.SSSR.findRings=function(molecule){var nsssr=molecule.countBonds()-molecule.countAtoms()+
1;if(!nsssr)return[];var matrices=makePIDMatrixes(molecule);var Cset=makeCandidateSet(matrices.D,matrices.Pe1,matrices.Pe2);var indexes=candidateSearch(Cset,nsssr,molecule,matrices.D);for(var i=0,li=indexes.length;i<li;i++)indexes[i]=sortByPath(indexes[i],molecule);return indexes}})();goog.provide("kemia.ring.RingFinder");goog.require("kemia.ring.Hanser");goog.require("kemia.ring.SSSR");goog.require("goog.structs.Set");goog.require("goog.structs.Set");goog.require("goog.array");goog.require("kemia.ring.Ring");
(function(){kemia.ring.RingFinder={};function createRing(atomIndexes,molecule){var atoms=[];for(var i=0,li=atomIndexes.length;i<li;i++)atoms.push(molecule.getAtom(atomIndexes[i]));var bonds=[];for(var i=0,il=atoms.length-1;i<il;i++){bond=molecule.findBond(atoms[i],atoms[i+1]);if(bond!=null)bonds.push(bond)}bond=molecule.findBond(atoms[0],atoms[atoms.length-1]);if(bond!=null)bonds.push(bond);var ring=new kemia.ring.Ring(atoms,bonds);return ring}function isCandidateInSet(C,Csssr,valences,ringCount){for(var i=
0,li=Csssr.length;i<li;i++){var sssr=Csssr[i];if(C.length>=sssr.length){var candidateContainsRing=true;for(var j=0,lj=sssr.length;j<lj;j++)if(!goog.array.contains(C,sssr[j]))candidateContainsRing=false;if(candidateContainsRing)return true}for(j=0,lj=C.length;j<lj;j++)if(goog.array.contains(sssr,C[j]))ringCount[j]++}var isNewRing=false;for(j=0,lj=C.length;j<lj;j++)if(ringCount[C[j]]<valences[C[j]]-1)isNewRing=true;if(isNewRing){for(j=0,lj=C.length;j<lj;j++)ringCount[C[j]]++;return false}return true}
function verifySSSR(sssr,nsssr,molecule){var Csssr=[];var valences=[];for(var i=0,li=molecule.countAtoms();i<li;i++)valences.push(molecule.getAtom(i).countBonds());var ringCount=goog.array.repeat(0,molecule.countAtoms());for(var i=0,li=sssr.length;i<li;i++){var ring=sssr[i];if(!kemia.ring.SSSR.isCandidateInSet(ring,Csssr,valences,ringCount)){Csssr.push(ring);if(Csssr.length==nsssr)return Csssr}}return Csssr}function detectRingAtoms(molecule){var n=molecule.countAtoms();if(!n)return;var visitedAtoms=
goog.array.repeat(false,n);var visitedBonds=goog.array.repeat(false,n);var queue=[];var startAtom=molecule.atoms[0];startAtom.depth=0;queue.push(startAtom);visitedAtoms[0]=true;while(true){if(!queue.length)break;var atom=queue[0];goog.array.removeAt(queue,0);var bonds=atom.bonds.getValues();for(var i=0,li=bonds.length;i<li;i++){var bond=bonds[i];var bondIndex=bond.index;if(visitedBonds[bondIndex])continue;visitedBonds[bondIndex]=true;var neighbor=bond.otherAtom(atom);var neighborIndex=neighbor.index;
if(visitedAtoms[neighborIndex]){var previous=[],depth;if(atom.depth==neighbor.depth){previous.push(atom);previous.push(neighbor);depth=atom.depth}else{neighbor.isInCycle=true;var nbrNeighbors=neighbor.getNeighbors();for(var j=0,lj=nbrNeighbors.length;j<lj;j++){var nbrNeighbor=nbrNeighbors[j];if(nbrNeighbor.depth==neighbor.depth-1)previous.push(nbrNeighbor)}depth=atom.depth}while(true){previous[0].isInCycle=true;previous[1].isInCycle=true;depth--;var prevNeighbors1=previous[0].getNeighbors();for(var j=
0,lj=prevNeighbors1.length;j<lj;j++)if(prevNeighbors1[j].depth==depth){previous[0]=prevNeighbors1[j];break}var prevNeighbors2=previous[1].getNeighbors();for(var j=0,lj=prevNeighbors2.length;j<lj;j++)if(prevNeighbors2[j].depth==depth){previous[1]=prevNeighbors2[j];break}if(previous[0]==previous[1]){previous[0].isInCycle=true;break}}}else{neighbor.depth=atom.depth+1;visitedAtoms[neighborIndex]=true;queue.push(neighbor)}}}}function createRingSystems(molecule){var rings=[];var n=molecule.countAtoms();
var visitedAtoms=goog.array.repeat(false,n);var visitedBonds=goog.array.repeat(false,n);var indexMap=goog.array.repeat(-1,n);for(var k=0,lk=molecule.countAtoms();k<lk;k++){var startAtom=molecule.atoms[k];if(visitedAtoms[startAtom.index])continue;if(!startAtom.isInCycle)continue;var ringSystem=new kemia.model.Molecule;var queue=[];queue.push(startAtom);visitedAtoms[0]=true;var newAtom=new kemia.model.Atom;newAtom.index2=startAtom.index;indexMap[startAtom.index]=0;ringSystem.addAtom(newAtom);while(true){if(!queue.length)break;
var atom=queue[0];goog.array.removeAt(queue,0);var bonds=atom.bonds.getValues();for(var i=0,li=bonds.length;i<li;i++){var bond=bonds[i];var bondIndex=bond.index;if(visitedBonds[bondIndex])continue;visitedBonds[bondIndex]=true;var neighbor=bond.otherAtom(atom);var neighborIndex=neighbor.index;if(!neighbor.isInCycle)continue;if(visitedAtoms[neighborIndex]){var closureBond=molecule.findBond(atom,neighbor);var newBond=new kemia.model.Bond(ringSystem.atoms[indexMap[atom.index]],ringSystem.atoms[indexMap[neighbor.index]]);
newBond.index2=closureBond.index;ringSystem.addBond(newBond)}else{visitedAtoms[neighborIndex]=true;queue.push(neighbor);newAtom=new kemia.model.Atom;newAtom.index2=neighbor.index;indexMap[neighbor.index]=ringSystem.atoms.length;ringSystem.addAtom(newAtom);var bond=molecule.findBond(atom,neighbor);var newBond=new kemia.model.Bond(ringSystem.atoms[indexMap[atom.index]],newAtom);newBond.index2=bond.index;ringSystem.addBond(newBond)}}}for(var i=0,li=ringSystem.atoms.length;i<li;i++)ringSystem.atoms[i].index=
i;for(var i=0,li=ringSystem.bonds.length;i<li;i++)ringSystem.bonds[i].index=i;var nsssr=ringSystem.bonds.length-ringSystem.atoms.length+1;var sssr;var hanser=kemia.ring.Hanser.findRings(ringSystem,6);if(hanser.length>=nsssr){sssr=verifySSSR(hanser,nsssr,ringSystem);if(sssr.length<nsssr)sssr=kemia.ring.SSSR.findRings(ringSystem)}else sssr=kemia.ring.SSSR.findRings(ringSystem);for(i=0,li=sssr.length;i<li;i++){var ring=sssr[i];for(var j=0,lj=ring.length;j<lj;j++)ring[j]=ringSystem.atoms[ring[j]].index2}for(var i=
0,il=sssr.length;i<il;i++)rings.push(createRing(sssr[i],molecule))}return rings}kemia.ring.RingFinder.findRings=function(molecule){var nsssr=molecule.countBonds()-molecule.countAtoms()+molecule.fragmentCount;if(!nsssr)return[];for(var i=0,li=molecule.atoms.length;i<li;i++)molecule.atoms[i].index=i;for(var i=0,li=molecule.bonds.length;i<li;i++)molecule.bonds[i].index=i;detectRingAtoms(molecule);return createRingSystems(molecule)}})();goog.provide("kemia.model.Molecule");goog.require("goog.array");goog.require("kemia.ring.RingFinder");goog.require("kemia.model.Atom");kemia.model.Molecule=function(opt_name){this.bonds=[];this.atoms=[];this.name=opt_name?opt_name:"";this.sssr=[];this.mustRecalcSSSR=true;this.fragments=[];this.fragmentCount=0};
kemia.model.Molecule.prototype.addBond=function(bond){var sourceIndex=this.indexOfAtom(bond.source);var targetIndex=this.indexOfAtom(bond.target);if(this.fragments[sourceIndex]!=this.fragments[targetIndex]){var before,after;if(this.fragments[sourceIndex]<this.fragments[targetIndex]){before=this.fragments[sourceIndex];after=this.fragments[targetIndex]}else{after=this.fragments[sourceIndex];before=this.fragments[targetIndex]}this.fragmentCount--;for(var i=0,li=this.atoms.length;i<li;i++)if(this.fragments[i]==
before)this.fragments[i]=after}this.bonds.push(bond);bond.source.bonds.add(bond);bond.target.bonds.add(bond);bond.molecule=this};kemia.model.Molecule.prototype.getAtom=function(id){return this.atoms[id]};kemia.model.Molecule.prototype.getBond=function(id){return this.bonds[id]};kemia.model.Molecule.prototype.findBond=function(atom1,atom2){var bonds=atom1.bonds.getValues();for(var i=0,li=bonds.length;i<li;i++){var bond=bonds[i];if(bond.otherAtom(atom1)==atom2)return bond}return null};
kemia.model.Molecule.prototype.indexOfAtom=function(atom){return goog.array.indexOf(this.atoms,atom)};kemia.model.Molecule.prototype.indexOfBond=function(bond){return goog.array.indexOf(this.bonds,bond)};
kemia.model.Molecule.prototype.removeAtom=function(atomOrId){var atom;if(atomOrId.constructor==Number)atom=this.atoms[atomOrId];else if(atomOrId.constructor==kemia.model.Atom)atom=atomOrId;var neighborBonds=atom.bonds.getValues();var molBonds=this.bonds;goog.array.forEach(neighborBonds,function(element,index,array){goog.array.remove(molBonds,element)});atom.bonds.clear();goog.array.remove(this.atoms,atom);atom.molecule=undefined};
kemia.model.Molecule.prototype.removeBond=function(bondOrId){var bond;if(bondOrId.constructor==Number)bond=this.bonds[bondOrId];else bond=bondOrId;bond.source.bonds.remove(bond);bond.target.bonds.remove(bond);if(bond.source.bonds.length==0){goog.array.remove(this.atoms,bond.source);bond.source.molecule=undefined}if(bond.target.bonds.length==0){goog.array.remove(this.atoms,bond.target);bond.target.molecule=undefined}goog.array.remove(this.bonds,bond);bond.molecule=undefined;bond.source=undefined;bond.target=
undefined};kemia.model.Molecule.prototype.countAtoms=function(){return this.atoms.length};kemia.model.Molecule.prototype.countBonds=function(){return this.bonds.length};kemia.model.Molecule.prototype.addAtom=function(atom){var index=this.atoms.length;this.fragmentCount++;this.fragments[index]=this.fragmentCount;this.atoms.push(atom);atom.molecule=this};kemia.model.Molecule.prototype.getRings=function(){if(this.mustRecalcSSSR){this.mustRecalcSSSR=false;this.sssr=kemia.ring.RingFinder.findRings(this)}return this.sssr};
kemia.model.Molecule.prototype.clone=function(){var mol=new kemia.model.Molecule(this.name);goog.array.forEach(this.atoms,function(atom){mol.addAtom(atom)});goog.array.forEach(this.bonds,function(bond){mol.addBond(bond)});return mol};
kemia.model.Molecule.prototype.getFragments=function(){var mol=this.clone();if(mol.fragmentCount==1)return[mol];var fragments=new goog.structs.Map;goog.array.forEach(mol.atoms,function(atom){var frag=mol.fragments[mol.indexOfAtom(atom)];if(fragments.containsKey(frag)==false)fragments.set(frag,new kemia.model.Molecule);fragments.get(frag).addAtom(atom)});goog.array.forEach(mol.bonds,function(bond){var frag=mol.fragments[mol.indexOfAtom(bond.source)];fragments.get(frag).addBond(bond)});return fragments.getValues()};
kemia.model.Molecule.prototype.getConnectedBondsList=function(atom){bondsList=new Array;bondCount=this.bonds.length;for(i=0;i<bondCount;i++)if(this.bonds[i].source==atom||this.bonds[i].target==atom)bondsList.push(this.bonds[i]);return bondsList};kemia.model.Molecule.prototype.toString=function(){return goog.array.map(this.atoms,function(atom){return atom.symbol+atom.index+atom.coord.toString()})};
kemia.model.Molecule.prototype.getCenter=function(){var box=this.getBoundingBox();return new goog.math.Coordinate((box.left+box.right)/2,(box.top+box.bottom)/2)};kemia.model.Molecule.prototype.getBoundingBox=function(){return goog.math.Box.boundingBox.apply(null,goog.array.map(this.atoms,function(a){return a.coord}))};goog.provide("kemia.controller.plugins.MoleculeEdit");goog.require("kemia.controller.Plugin");goog.require("goog.debug.Logger");goog.require("kemia.model.Molecule");kemia.controller.plugins.MoleculeEdit=function(){kemia.controller.Plugin.call(this)};goog.inherits(kemia.controller.plugins.MoleculeEdit,kemia.controller.Plugin);kemia.controller.plugins.MoleculeEdit.prototype.logger=goog.debug.Logger.getLogger("kemia.controller.plugins.MoleculeEdit");kemia.controller.plugins.MoleculeEdit.COMMAND="selectMoleculeTemplate";
kemia.controller.plugins.MoleculeEdit.prototype.isSupportedCommand=function(command){return command==kemia.controller.plugins.MoleculeEdit.COMMAND};kemia.controller.plugins.MoleculeEdit.prototype.getTrogClassId=goog.functions.constant(kemia.controller.plugins.MoleculeEdit.COMMAND);
kemia.controller.plugins.MoleculeEdit.prototype.execCommandInternal=function(command,var_args){this.template=arguments[1];var e=arguments[3];var molecule=kemia.io.json.readMolecule(this.template);var mol_bbox=molecule.getBoundingBox();var origin=this.editorObject.reactionRenderer.transform.createInverse().transformCoords([new goog.math.Coordinate(0,0)])[0];var mol_offset=new goog.math.Coordinate(mol_bbox.right-mol_bbox.left,mol_bbox.top-mol_bbox.bottom);var diff=goog.math.Coordinate.difference(origin,
molecule.getCenter());diff=goog.math.Coordinate.difference(diff,mol_offset);if(this.editorObject.getModels().length>0)var reaction=this.editorObject.getModels()[0];else reaction=new kemia.model.Reaction;reaction.addReactant(molecule);reaction.translateMolecule(molecule,diff);this.editorObject.setModels([reaction]);var mol_center=molecule.getCenter();var center=this.editorObject.reactionRenderer.transform.transformCoords([mol_center])[0];e.clientX=center.x+25;e.clientY=center.y+125;this.drag(e,molecule)};
kemia.controller.plugins.MoleculeEdit.prototype.logger=goog.debug.Logger.getLogger("kemia.controller.plugins.MoleculeEdit");kemia.controller.plugins.MoleculeEdit.prototype.handleMouseDown=function(e){this.editorObject.dispatchBeforeChange();var target=this.editorObject.findTarget(e);if(target instanceof kemia.model.Molecule)if(e.shiftKey)this.rotate(e,target);else this.drag(e,target);this.editorObject.dispatchChange()};
kemia.controller.plugins.MoleculeEdit.prototype.drag=function(e,molecule){var d=new goog.fx.Dragger(this.editorObject.getOriginalElement());d._start=new goog.math.Coordinate(e.clientX,e.clientY);d._prev=d._start;d.molecule=molecule;d.editor=this.editorObject;d.addEventListener(goog.fx.Dragger.EventType.DRAG,function(e){if(d._highlightGroups)goog.array.forEach(d._highlightGroups,function(g){g.clear()});d._highlightGroups=[];var mouse_coord=new goog.math.Coordinate(e.clientX,e.clientY);var diff=goog.math.Coordinate.difference(mouse_coord,
d._start);d.molecule.group.setTransformation(diff.x,diff.y,0,0,0);var mol_coords=d.editor.reactionRenderer.transform.createInverse().transformCoords([mouse_coord,d._prev]);var diff=goog.math.Coordinate.difference(mol_coords[0],mol_coords[1]);d.molecule.reaction.translateMolecule(d.molecule,diff);d._prev=mouse_coord;var merge_pairs=this.findAtomMergePairs(molecule);if(merge_pairs.length>0)merge_pairs=[merge_pairs[0]];goog.array.forEach(merge_pairs,function(pair){d._highlightGroups.push(d.editor.reactionRenderer.moleculeRenderer.atomRenderer.highlightOn(pair[0]));
d._highlightGroups.push(d.editor.reactionRenderer.moleculeRenderer.atomRenderer.highlightOn(pair[1]))})},undefined,this);d.addEventListener(goog.fx.Dragger.EventType.END,function(e){var merge_pairs=this.findAtomMergePairs(d.molecule);if(merge_pairs.length>0)merge_pairs=[merge_pairs[0]];goog.array.forEach(merge_pairs,function(pair){kemia.controller.plugins.AtomEdit.mergeMolecules(pair[0],pair[1])},this);d.editor.setModels(d.editor.getModels());d.dispose()},undefined,this);d.startDrag(e)};
kemia.controller.plugins.MoleculeEdit.prototype.findAtomMergePairs=function(molecule){return goog.array.filter(goog.array.map(molecule.atoms,function(atom){var nearest=this.editorObject.neighborList.getNearestList({x:atom.coord.x,y:atom.coord.y},this);var other_atoms=goog.array.filter(nearest,function(other){if(other instanceof kemia.model.Atom)if(!goog.array.contains(molecule.atoms,other))return true;return false});if(other_atoms.length>0)return[atom,other_atoms[0]];else return false},this),function(pair){return pair!=
false},this)};
kemia.controller.plugins.MoleculeEdit.prototype.rotate=function(e,molecule){var d=new goog.fx.Dragger(this.editorObject.getOriginalElement());d._center=this.editorObject.reactionRenderer.transform.transformCoords([molecule.getCenter()])[0];d._start=kemia.controller.ReactionEditor.getMouseCoords(e);d._start_angle=goog.math.angle(d._center.x,d._center.y,d._start.x,d._start.y);d.group=molecule.group;d.molecule=molecule;d.editor=this.editorObject;d.addEventListener(goog.fx.Dragger.EventType.DRAG,function(e){var new_angle=
goog.math.angle(d._center.x,d._center.y,d._start.x+d.deltaX,d._start.y+d.deltaY);var g_trans=d.group.getTransform();var degrees=new_angle-d._start_angle;d.group.setTransformation(0,0,degrees,d._center.x,d._center.y)});d.addEventListener(goog.fx.Dragger.EventType.END,function(e){var mol_center=d.editor.reactionRenderer.transform.createInverse().transformCoords([d._center])[0];var new_angle=goog.math.angle(d._center.x,d._center.y,d._start.x+d.deltaX,d._start.y+d.deltaY);var degrees=new_angle-d._start_angle;
d.molecule.reaction.rotateMolecule(d.molecule,-degrees,mol_center);d.editor.setModels(d.editor.getModels());d.dispose()});d.startDrag(e)};
kemia.controller.plugins.MoleculeEdit.TEMPLATES=[{name:"benzene",atoms:[{symbol:"C",coord:{x:2.5981,y:0.75,z:0},charge:0},{symbol:"C",coord:{x:2.5981,y:2.25,z:0},charge:0},{symbol:"C",coord:{x:1.3,y:3,z:0},charge:0},{symbol:"C",coord:{x:0,y:2.25,z:0},charge:0},{symbol:"C",coord:{x:0,y:0.75,z:0},charge:0},{symbol:"C",coord:{x:1.3,y:0,z:0},charge:0}],bondindex:[{source:0,target:1,type:"DOUBLE_BOND",stereo:"NOT_STEREO"},{source:1,target:2,type:"SINGLE_BOND",stereo:"NOT_STEREO"},{source:2,target:3,type:"DOUBLE_BOND",
stereo:"NOT_STEREO"},{source:3,target:4,type:"SINGLE_BOND",stereo:"NOT_STEREO"},{source:4,target:5,type:"DOUBLE_BOND",stereo:"NOT_STEREO"},{source:5,target:0,type:"SINGLE_BOND",stereo:"NOT_STEREO"}]},{name:"cyclohexane",atoms:[{symbol:"C",coord:{x:2.5981,y:0.75,z:0},charge:0},{symbol:"C",coord:{x:2.5981,y:2.25,z:0},charge:0},{symbol:"C",coord:{x:1.3,y:3,z:0},charge:0},{symbol:"C",coord:{x:0,y:2.25,z:0},charge:0},{symbol:"C",coord:{x:0,y:0.75,z:0},charge:0},{symbol:"C",coord:{x:1.3,y:0,z:0},charge:0}],
bondindex:[{source:0,target:1,type:"SINGLE_BOND",stereo:"NOT_STEREO"},{source:1,target:2,type:"SINGLE_BOND",stereo:"NOT_STEREO"},{source:2,target:3,type:"SINGLE_BOND",stereo:"NOT_STEREO"},{source:3,target:4,type:"SINGLE_BOND",stereo:"NOT_STEREO"},{source:4,target:5,type:"SINGLE_BOND",stereo:"NOT_STEREO"},{source:5,target:0,type:"SINGLE_BOND",stereo:"NOT_STEREO"}]},{name:"cyclopentane",atoms:[{symbol:"C",coord:{x:-2.3083,y:0.4635,z:0},charge:0},{symbol:"C",coord:{x:-2.3083,y:1.9635,z:0},charge:0},
{symbol:"C",coord:{x:-0.8817,y:2.427,z:0},charge:0},{symbol:"C",coord:{x:0,y:1.2135,z:0},charge:0},{symbol:"C",coord:{x:-0.8817,y:0,z:0},charge:0}],bondindex:[{source:0,target:1,type:"SINGLE_BOND",stereo:"NOT_STEREO"},{source:1,target:2,type:"SINGLE_BOND",stereo:"NOT_STEREO"},{source:2,target:3,type:"SINGLE_BOND",stereo:"NOT_STEREO"},{source:3,target:4,type:"SINGLE_BOND",stereo:"NOT_STEREO"},{source:4,target:0,type:"SINGLE_BOND",stereo:"NOT_STEREO"}]},{name:"cyclopentane",atoms:[{symbol:"C",coord:{x:2.5981,
y:0.75,z:0},charge:0},{symbol:"C",coord:{x:2.5981,y:2.25,z:0},charge:0},{symbol:"C",coord:{x:0,y:2.25,z:0},charge:0},{symbol:"C",coord:{x:0,y:0.75,z:0},charge:0},{symbol:"C",coord:{x:1.3,y:0,z:0},charge:0}],bondindex:[{source:0,target:1,type:"SINGLE_BOND",stereo:"NOT_STEREO"},{source:1,target:2,type:"SINGLE_BOND",stereo:"NOT_STEREO"},{source:2,target:3,type:"SINGLE_BOND",stereo:"NOT_STEREO"},{source:3,target:4,type:"SINGLE_BOND",stereo:"NOT_STEREO"},{source:4,target:0,type:"SINGLE_BOND",stereo:"NOT_STEREO"}]},
{name:"pyrrole",atoms:[{symbol:"C",coord:{x:2.5981,y:0.75,z:0},charge:0},{symbol:"C",coord:{x:2.5981,y:2.25,z:0},charge:0},{symbol:"C",coord:{x:0,y:2.25,z:0},charge:0},{symbol:"C",coord:{x:0,y:0.75,z:0},charge:0},{symbol:"N",coord:{x:1.3,y:0,z:0},charge:0}],bondindex:[{source:0,target:1,type:"DOUBLE_BOND",stereo:"NOT_STEREO"},{source:1,target:2,type:"SINGLE_BOND",stereo:"NOT_STEREO"},{source:2,target:3,type:"DOUBLE_BOND",stereo:"NOT_STEREO"},{source:3,target:4,type:"SINGLE_BOND",stereo:"NOT_STEREO"},
{source:4,target:0,type:"SINGLE_BOND",stereo:"NOT_STEREO"}]},{name:"pyrrole",atoms:[{symbol:"C",coord:{x:-2.3083,y:0.4635,z:0},charge:0},{symbol:"C",coord:{x:-2.3083,y:1.9635,z:0},charge:0},{symbol:"C",coord:{x:-0.8817,y:2.427,z:0},charge:0},{symbol:"C",coord:{x:0,y:1.2135,z:0},charge:0},{symbol:"N",coord:{x:-0.8817,y:0,z:0},charge:0}],bondindex:[{source:0,target:1,type:"DOUBLE_BOND",stereo:"NOT_STEREO"},{source:1,target:2,type:"SINGLE_BOND",stereo:"NOT_STEREO"},{source:2,target:3,type:"DOUBLE_BOND",
stereo:"NOT_STEREO"},{source:3,target:4,type:"SINGLE_BOND",stereo:"NOT_STEREO"},{source:4,target:0,type:"SINGLE_BOND",stereo:"NOT_STEREO"}]},{name:"naphthalene",atoms:[{symbol:"C",coord:{x:2.5981,y:0.75,z:0},charge:0},{symbol:"C",coord:{x:2.5981,y:2.25,z:0},charge:0},{symbol:"C",coord:{x:1.2991,y:3,z:0},charge:0},{symbol:"C",coord:{x:0,y:2.25,z:0},charge:0},{symbol:"C",coord:{x:0,y:0.75,z:0},charge:0},{symbol:"C",coord:{x:1.2991,y:0,z:0},charge:0},{symbol:"C",coord:{x:3.8971,y:3,z:0},charge:0},{symbol:"C",
coord:{x:5.1962,y:2.25,z:0},charge:0},{symbol:"C",coord:{x:5.1962,y:0.75,z:0},charge:0},{symbol:"C",coord:{x:3.8971,y:0,z:0},charge:0}],bondindex:[{source:0,target:1,type:"DOUBLE_BOND",stereo:"NOT_STEREO"},{source:1,target:2,type:"SINGLE_BOND",stereo:"NOT_STEREO"},{source:2,target:3,type:"DOUBLE_BOND",stereo:"NOT_STEREO"},{source:3,target:4,type:"SINGLE_BOND",stereo:"NOT_STEREO"},{source:4,target:5,type:"DOUBLE_BOND",stereo:"NOT_STEREO"},{source:5,target:0,type:"SINGLE_BOND",stereo:"NOT_STEREO"},
{source:1,target:6,type:"SINGLE_BOND",stereo:"NOT_STEREO"},{source:6,target:7,type:"DOUBLE_BOND",stereo:"NOT_STEREO"},{source:7,target:8,type:"SINGLE_BOND",stereo:"NOT_STEREO"},{source:8,target:9,type:"DOUBLE_BOND",stereo:"NOT_STEREO"},{source:9,target:0,type:"SINGLE_BOND",stereo:"NOT_STEREO"}]}];goog.provide("goog.ui.FlatButtonRenderer");goog.require("goog.dom.classes");goog.require("goog.ui.Button");goog.require("goog.ui.ButtonRenderer");goog.require("goog.ui.INLINE_BLOCK_CLASSNAME");goog.require("goog.ui.registry");goog.ui.FlatButtonRenderer=function(){goog.ui.ButtonRenderer.call(this)};goog.inherits(goog.ui.FlatButtonRenderer,goog.ui.ButtonRenderer);goog.addSingletonGetter(goog.ui.FlatButtonRenderer);goog.ui.FlatButtonRenderer.CSS_CLASS=goog.getCssName("goog-flat-button");
goog.ui.FlatButtonRenderer.prototype.createDom=function(button){var classNames=this.getClassNames(button);var attributes={"class":goog.ui.INLINE_BLOCK_CLASSNAME+" "+classNames.join(" "),title:button.getTooltip()||""};return button.getDomHelper().createDom("div",attributes,button.getContent())};goog.ui.FlatButtonRenderer.prototype.canDecorate=function(element){return element.tagName=="DIV"};
goog.ui.FlatButtonRenderer.prototype.decorate=function(button,element){goog.dom.classes.add(element,goog.ui.INLINE_BLOCK_CLASSNAME);return goog.ui.FlatButtonRenderer.superClass_.decorate.call(this,button,element)};goog.ui.FlatButtonRenderer.prototype.getValue=function(element){return null};goog.ui.FlatButtonRenderer.prototype.getCssClass=function(){return goog.ui.FlatButtonRenderer.CSS_CLASS};
goog.ui.registry.setDecoratorByClassName(goog.ui.FlatButtonRenderer.CSS_CLASS,function(){return new goog.ui.Button(null,goog.ui.FlatButtonRenderer.getInstance())});goog.provide("goog.ui.FlatMenuButtonRenderer");goog.require("goog.style");goog.require("goog.ui.ControlContent");goog.require("goog.ui.FlatButtonRenderer");goog.require("goog.ui.INLINE_BLOCK_CLASSNAME");goog.require("goog.ui.Menu");goog.require("goog.ui.MenuButton");goog.require("goog.ui.MenuRenderer");goog.require("goog.ui.registry");goog.ui.FlatMenuButtonRenderer=function(){goog.ui.FlatButtonRenderer.call(this)};goog.inherits(goog.ui.FlatMenuButtonRenderer,goog.ui.FlatButtonRenderer);goog.addSingletonGetter(goog.ui.FlatMenuButtonRenderer);
goog.ui.FlatMenuButtonRenderer.CSS_CLASS=goog.getCssName("goog-flat-menu-button");goog.ui.FlatMenuButtonRenderer.prototype.createDom=function(button){var classNames=this.getClassNames(button);var attributes={"class":goog.ui.INLINE_BLOCK_CLASSNAME+" "+classNames.join(" "),title:button.getTooltip()||""};return button.getDomHelper().createDom("div",attributes,[this.createCaption(button.getContent(),button.getDomHelper()),this.createDropdown(button.getDomHelper())])};
goog.ui.FlatMenuButtonRenderer.prototype.getContentElement=function(element){return element&&element.firstChild};
goog.ui.FlatMenuButtonRenderer.prototype.decorate=function(button,element){var menuElem=goog.dom.getElementsByTagNameAndClass("*",goog.ui.MenuRenderer.CSS_CLASS,element)[0];if(menuElem){goog.style.showElement(menuElem,false);button.getDomHelper().getDocument().body.appendChild(menuElem);var menu=new goog.ui.Menu;menu.decorate(menuElem);button.setMenu(menu)}var captionElem=goog.dom.getElementsByTagNameAndClass("*",goog.getCssName(this.getCssClass(),"caption"),element)[0];if(!captionElem)element.appendChild(this.createCaption(element.childNodes,
button.getDomHelper()));var dropdownElem=goog.dom.getElementsByTagNameAndClass("*",goog.getCssName(this.getCssClass(),"dropdown"),element)[0];if(!dropdownElem)element.appendChild(this.createDropdown(button.getDomHelper()));return goog.ui.FlatMenuButtonRenderer.superClass_.decorate.call(this,button,element)};goog.ui.FlatMenuButtonRenderer.prototype.createCaption=function(content,dom){return dom.createDom("div",goog.ui.INLINE_BLOCK_CLASSNAME+" "+goog.getCssName(this.getCssClass(),"caption"),content)};
goog.ui.FlatMenuButtonRenderer.prototype.createDropdown=function(dom){return dom.createDom("div",goog.ui.INLINE_BLOCK_CLASSNAME+" "+goog.getCssName(this.getCssClass(),"dropdown"),"\u00a0")};goog.ui.FlatMenuButtonRenderer.prototype.getCssClass=function(){return goog.ui.FlatMenuButtonRenderer.CSS_CLASS};goog.ui.registry.setDecoratorByClassName(goog.ui.FlatMenuButtonRenderer.CSS_CLASS,function(){return new goog.ui.MenuButton(null,null,goog.ui.FlatMenuButtonRenderer.getInstance())});goog.provide("kemia.controller.TemplateMenuButtonRenderer");goog.require("goog.ui.FlatMenuButtonRenderer");kemia.controller.TemplateMenuButtonRenderer=function(){goog.ui.FlatMenuButtonRenderer.call(this)};goog.inherits(kemia.controller.TemplateMenuButtonRenderer,goog.ui.FlatMenuButtonRenderer);goog.addSingletonGetter(kemia.controller.TemplateMenuButtonRenderer);goog.provide("kemia.controller.DefaultToolbar");goog.require("goog.dom");goog.require("goog.dom.TagName");goog.require("goog.dom.classes");goog.require("goog.string.StringBuffer");goog.require("goog.style");goog.require("goog.ui.ControlContent");goog.require("kemia.controller.ToolbarFactory");goog.require("kemia.controller.Command");goog.require("kemia.controller.plugins.Erase");goog.require("kemia.controller.plugins.ClearEditor");goog.require("kemia.controller.plugins.Zoom");goog.require("kemia.controller.plugins.BondEdit");
goog.require("kemia.controller.plugins.Highlight");goog.require("kemia.controller.plugins.AtomEdit");goog.require("kemia.controller.plugins.UndoRedo");goog.require("kemia.controller.plugins.ArrowPlusEdit");goog.require("kemia.controller.plugins.MoleculeEdit");goog.require("kemia.controller.TemplateMenuButtonRenderer");
kemia.controller.DefaultToolbar.makeDefaultToolbar=function(elem){var buttons=[];buttons.push(kemia.controller.ToolbarFactory.makeButton(kemia.controller.plugins.ClearEditor.COMMAND,"Clear Editor","Clear"));buttons.push(kemia.controller.ToolbarFactory.makeButton(kemia.controller.plugins.Zoom.COMMAND.ZOOM_IN,"zoom in","+"));buttons.push(kemia.controller.ToolbarFactory.makeButton(kemia.controller.plugins.Zoom.COMMAND.ZOOM_OUT,"zoom out","-"));buttons.push(kemia.controller.ToolbarFactory.makeButton(kemia.controller.plugins.UndoRedo.COMMAND.UNDO,
"undo","undo"));buttons.push(kemia.controller.ToolbarFactory.makeButton(kemia.controller.plugins.UndoRedo.COMMAND.REDO,"redo","redo"));buttons.push(kemia.controller.ToolbarFactory.makeToggleButton(kemia.controller.plugins.Erase.COMMAND,"erase","erase"));var atom_select=kemia.controller.ToolbarFactory.makeSelectButton(kemia.controller.plugins.AtomEdit.COMMAND,"select Symbol","Symbol");var atom_menu=new goog.ui.Menu;atom_menu.addItem(new goog.ui.Option(goog.dom.createDom(goog.dom.TagName.DIV,{style:"color:black"},
"C")));atom_menu.addItem(new goog.ui.Option(goog.dom.createDom(goog.dom.TagName.DIV,{style:"color:blue"},"N")));atom_menu.addItem(new goog.ui.Option(goog.dom.createDom(goog.dom.TagName.DIV,{style:"color:red"},"O")));atom_menu.addItem(new goog.ui.Option(goog.dom.createDom(goog.dom.TagName.DIV,{style:"color:yellow"},"S")));atom_menu.addItem(new goog.ui.Option(goog.dom.createDom(goog.dom.TagName.DIV,{style:"color:orange"},"P")));atom_menu.addItem(new goog.ui.Option(goog.dom.createDom(goog.dom.TagName.DIV,
{style:"color:green"},"F")));atom_menu.addItem(new goog.ui.Option(goog.dom.createDom(goog.dom.TagName.DIV,{style:"color:green"},"Cl")));atom_menu.addItem(new goog.ui.Option(goog.dom.createDom(goog.dom.TagName.DIV,{style:"color:DarkRed"},"Br")));atom_select.setMenu(atom_menu);buttons.push(atom_select);var bond_select=kemia.controller.ToolbarFactory.makeSelectButton(kemia.controller.plugins.BondEdit.COMMAND,"select Bond Type","Bond");var bond_menu=new goog.ui.Menu;goog.array.forEach(kemia.controller.plugins.BondEdit.BOND_TYPES,
function(entry){bond_menu.addItem(new goog.ui.Option(entry.caption,entry))});bond_select.setMenu(bond_menu);buttons.push(bond_select);var renderer=undefined;var template_select=kemia.controller.ToolbarFactory.makeSelectButton(kemia.controller.plugins.MoleculeEdit.COMMAND,"select Template","Template",undefined,renderer);var template_menu=new goog.ui.Menu;goog.array.forEach(kemia.controller.plugins.MoleculeEdit.TEMPLATES,function(template){template_menu.addItem(new goog.ui.Option(template.name,template))});
template_select.setMenu(template_menu);buttons.push(template_select);buttons.push(kemia.controller.ToolbarFactory.makeToggleButton(kemia.controller.plugins.ArrowPlusEdit.COMMAND.EDIT_ARROW,"arrow","arrow"));buttons.push(kemia.controller.ToolbarFactory.makeToggleButton(kemia.controller.plugins.ArrowPlusEdit.COMMAND.EDIT_PLUS,"plus","plus"));return kemia.controller.DefaultToolbar.makeToolbar(buttons,elem)};
kemia.controller.DefaultToolbar.makeToolbar=function(items,elem){var domHelper=goog.dom.getDomHelper(elem);var controls=[];for(var i=0,button;button=items[i];i++){if(goog.isString(button))button=kemia.controller.DefaultToolbar.makeBuiltInToolbarButton(button,domHelper);if(button)controls.push(button)}return kemia.controller.ToolbarFactory.makeToolbar(controls,elem)};
kemia.controller.DefaultToolbar.makeBuiltInToolbarButton=function(command,opt_domHelper){var button;var descriptor=kemia.controller.DefaultToolbar.buttons_[command];if(descriptor){var factory=descriptor.factory||kemia.controller.ToolbarFactory.makeToggleButton;var id=descriptor.command;var tooltip=descriptor.tooltip;var caption=descriptor.caption;var classNames=descriptor.classes;var domHelper=opt_domHelper||goog.dom.getDomHelper();button=factory(id,tooltip,caption,classNames,null,domHelper);if(descriptor.queryable)button.queryable=
true}return button};kemia.controller.DefaultToolbar.DEFAULT_BUTTONS=[kemia.controller.Command.INSERT_ATOM];kemia.controller.DefaultToolbar.DEFAULT_BUTTONS_RTL=[];
kemia.controller.DefaultToolbar.rtlButtonFactory_=function(id,tooltip,caption,opt_classNames,opt_renderer,opt_domHelper){var button=kemia.controller.ToolbarFactory.makeToggleButton(id,tooltip,caption,opt_classNames,opt_renderer,opt_domHelper);button.updateFromValue=function(value){var isRtl=!!value;goog.dom.classes.enable(button.getParent().getElement(),goog.getCssName("tr-rtl-mode"),isRtl);button.setChecked(isRtl)};return button};
kemia.controller.DefaultToolbar.undoRedoButtonFactory_=function(id,tooltip,caption,opt_classNames,opt_renderer,opt_domHelper){var button=kemia.controller.ToolbarFactory.makeButton(id,tooltip,caption,opt_classNames,opt_renderer,opt_domHelper);button.updateFromValue=function(value){button.setEnabled(value)};return button};
kemia.controller.DefaultToolbar.fontFaceFactory_=function(id,tooltip,caption,opt_classNames,opt_renderer,opt_domHelper){var button=kemia.controller.ToolbarFactory.makeSelectButton(id,tooltip,caption,opt_classNames,opt_renderer,opt_domHelper);kemia.controller.DefaultToolbar.addDefaultFonts(button);button.setDefaultCaption(kemia.controller.DefaultToolbar.MSG_FONT_NORMAL);goog.dom.classes.add(button.getMenu().getContentElement(),goog.getCssName("goog-menu-noaccel"));button.updateFromValue=function(value){var item=
null;if(value&&value.length>0)item=button.getMenu().getChild(kemia.controller.ToolbarFactory.getPrimaryFont(value));var selectedItem=button.getSelectedItem();if(item!=selectedItem)button.setSelectedItem(item)};return button};
kemia.controller.DefaultToolbar.fontSizeFactory_=function(id,tooltip,caption,opt_classNames,opt_renderer,opt_domHelper){var button=kemia.controller.ToolbarFactory.makeSelectButton(id,tooltip,caption,opt_classNames,opt_renderer,opt_domHelper);kemia.controller.DefaultToolbar.addDefaultFontSizes(button);button.setDefaultCaption(kemia.controller.DefaultToolbar.MSG_FONT_SIZE_NORMAL);goog.dom.classes.add(button.getMenu().getContentElement(),goog.getCssName("goog-menu-noaccel"));button.updateFromValue=function(value){if(goog.isString(value)&&
goog.style.getLengthUnits(value)=="px")value=kemia.controller.ToolbarFactory.getLegacySizeFromPx(parseInt(value,10));value=value>0?value:null;if(value!=button.getValue())button.setValue(value)};return button};
kemia.controller.DefaultToolbar.colorUpdateFromValue_=function(button,value){try{if(goog.userAgent.IE){var hex="000000"+value.toString(16);var bgr=hex.substr(hex.length-6,6);value=(new goog.string.StringBuffer("#",bgr.substring(4,6),bgr.substring(2,4),bgr.substring(0,2))).toString()}if(value!=button.getValue())button.setValue(value)}catch(ex){}};
kemia.controller.DefaultToolbar.fontColorFactory_=function(id,tooltip,caption,opt_classNames,opt_renderer,opt_domHelper){var button=kemia.controller.ToolbarFactory.makeColorMenuButton(id,tooltip,caption,opt_classNames,opt_renderer,opt_domHelper);button.setSelectedColor("#000");button.updateFromValue=goog.partial(kemia.controller.DefaultToolbar.colorUpdateFromValue_,button);return button};
kemia.controller.DefaultToolbar.backgroundColorFactory_=function(id,tooltip,caption,opt_classNames,opt_renderer,opt_domHelper){var button=kemia.controller.ToolbarFactory.makeColorMenuButton(id,tooltip,caption,opt_classNames,opt_renderer,opt_domHelper);button.setSelectedColor("#FFF");button.updateFromValue=goog.partial(kemia.controller.DefaultToolbar.colorUpdateFromValue_,button);return button};
kemia.controller.DefaultToolbar.formatBlockFactory_=function(id,tooltip,caption,opt_classNames,opt_renderer,opt_domHelper){var button=kemia.controller.ToolbarFactory.makeSelectButton(id,tooltip,caption,opt_classNames,opt_renderer,opt_domHelper);kemia.controller.DefaultToolbar.addDefaultFormatOptions(button);button.setDefaultCaption(kemia.controller.DefaultToolbar.MSG_FORMAT_NORMAL);goog.dom.classes.add(button.getMenu().getContentElement(),goog.getCssName("goog-menu-noaccel"));button.updateFromValue=
function(value){value=value&&value.length>0?value:null;if(value!=button.getValue())button.setValue(value)};return button};kemia.controller.DefaultToolbar.MSG_FORMAT_BLOCK_TITLE=goog.getMsg("Format");kemia.controller.DefaultToolbar.MSG_FORMAT_BLOCK_CAPTION=goog.getMsg("Format");kemia.controller.DefaultToolbar.MSG_UNDO_TITLE=goog.getMsg("Undo");kemia.controller.DefaultToolbar.MSG_REDO_TITLE=goog.getMsg("Redo");kemia.controller.DefaultToolbar.MSG_FONT_FACE_TITLE=goog.getMsg("Font");
kemia.controller.DefaultToolbar.MSG_FONT_SIZE_TITLE=goog.getMsg("Font size");kemia.controller.DefaultToolbar.MSG_FONT_COLOR_TITLE=goog.getMsg("Text color");kemia.controller.DefaultToolbar.MSG_BOLD_TITLE=goog.getMsg("Bold");kemia.controller.DefaultToolbar.MSG_ITALIC_TITLE=goog.getMsg("Italic");kemia.controller.DefaultToolbar.MSG_UNDERLINE_TITLE=goog.getMsg("Underline");kemia.controller.DefaultToolbar.MSG_BACKGROUND_COLOR_TITLE=goog.getMsg("Text background color");
kemia.controller.DefaultToolbar.MSG_LINK_TITLE=goog.getMsg("Add or remove link");kemia.controller.DefaultToolbar.MSG_ORDERED_LIST_TITLE=goog.getMsg("Numbered list");kemia.controller.DefaultToolbar.MSG_UNORDERED_LIST_TITLE=goog.getMsg("Bullet list");kemia.controller.DefaultToolbar.MSG_OUTDENT_TITLE=goog.getMsg("Decrease indent");kemia.controller.DefaultToolbar.MSG_INDENT_TITLE=goog.getMsg("Increase indent");kemia.controller.DefaultToolbar.MSG_ALIGN_LEFT_TITLE=goog.getMsg("Align left");
kemia.controller.DefaultToolbar.MSG_ALIGN_CENTER_TITLE=goog.getMsg("Align center");kemia.controller.DefaultToolbar.MSG_ALIGN_RIGHT_TITLE=goog.getMsg("Align right");kemia.controller.DefaultToolbar.MSG_JUSTIFY_TITLE=goog.getMsg("Justify");kemia.controller.DefaultToolbar.MSG_REMOVE_FORMAT_TITLE=goog.getMsg("Remove formatting");kemia.controller.DefaultToolbar.MSG_IMAGE_TITLE=goog.getMsg("Insert image");kemia.controller.DefaultToolbar.MSG_STRIKE_THROUGH_TITLE=goog.getMsg("Strikethrough");
kemia.controller.DefaultToolbar.MSG_DIR_LTR_TITLE=goog.getMsg("Left-to-right");kemia.controller.DefaultToolbar.MSG_DIR_RTL_TITLE=goog.getMsg("Right-to-left");kemia.controller.DefaultToolbar.MSG_BLOCKQUOTE_TITLE=goog.getMsg("Quote");kemia.controller.DefaultToolbar.MSG_EDIT_HTML_TITLE=goog.getMsg("Edit HTML source");kemia.controller.DefaultToolbar.MSG_LINK_CAPTION=goog.getMsg("Link");kemia.controller.DefaultToolbar.MSG_SUBSCRIPT=goog.getMsg("Subscript");
kemia.controller.DefaultToolbar.MSG_SUPERSCRIPT=goog.getMsg("Superscript");kemia.controller.DefaultToolbar.MSG_EDIT_HTML_CAPTION=goog.getMsg("Edit HTML");kemia.controller.DefaultToolbar.buttons_={};kemia.controller.DefaultToolbar.ButtonDescriptor=goog.typedef;kemia.controller.DefaultToolbar.BUTTONS_=[];(function(){for(var i=0,button;button=kemia.controller.DefaultToolbar.BUTTONS_[i];i++)kemia.controller.DefaultToolbar.buttons_[button.command]=button;delete kemia.controller.DefaultToolbar.BUTTONS_})();goog.provide("kemia.controller.ToolbarController");goog.require("kemia.controller.ReactionEditor.EventType");goog.require("goog.events.EventHandler");goog.require("goog.events.EventTarget");goog.require("goog.ui.Component.EventType");
kemia.controller.ToolbarController=function(editor,toolbar){goog.events.EventTarget.call(this);this.handler_=new goog.events.EventHandler(this);this.editor_=editor;this.toolbar_=toolbar;this.queryCommands_=[];this.toolbar_.forEachChild(function(button){if(button.queryable)this.queryCommands_.push(this.getComponentId(button.getId()))},this);this.toolbar_.setFocusable(false);this.handler_.listen(this.editor_,kemia.controller.ReactionEditor.EventType.COMMAND_VALUE_CHANGE,this.updateToolbar).listen(this.toolbar_,
goog.ui.Component.EventType.ACTION,this.handleAction)};goog.inherits(kemia.controller.ToolbarController,goog.events.EventTarget);kemia.controller.ToolbarController.prototype.getComponentId=function(command){return command};kemia.controller.ToolbarController.prototype.getCommand=function(id){return id};kemia.controller.ToolbarController.prototype.getHandler=function(){return this.handler_};kemia.controller.ToolbarController.prototype.getEditor=function(){return this.editor_};
kemia.controller.ToolbarController.prototype.getToolbar=function(){return this.toolbar_};kemia.controller.ToolbarController.prototype.isVisible=function(){return this.toolbar_.isVisible()};kemia.controller.ToolbarController.prototype.setVisible=function(visible){this.toolbar_.setVisible(visible)};kemia.controller.ToolbarController.prototype.isEnabled=function(){return this.toolbar_.isEnabled()};kemia.controller.ToolbarController.prototype.setEnabled=function(enabled){this.toolbar_.setEnabled(enabled)};
kemia.controller.ToolbarController.prototype.blur=function(){this.toolbar_.handleBlur(null)};kemia.controller.ToolbarController.prototype.disposeInternal=function(){kemia.controller.ToolbarController.superClass_.disposeInternal.call(this);if(this.handler_){this.handler_.dispose();delete this.handler_}if(this.toolbar_){this.toolbar_.dispose();delete this.toolbar_}delete this.editor_;delete this.queryCommands_};
kemia.controller.ToolbarController.prototype.updateToolbar=function(e){if(!this.toolbar_.isEnabled()||!this.dispatchEvent(goog.ui.Component.EventType.CHANGE))return;var state;try{e.commands;state=this.editor_.queryCommandValue(e.commands||this.queryCommands_)}catch(ex){state={}}this.updateToolbarFromState(state)};
kemia.controller.ToolbarController.prototype.updateToolbarFromState=function(state){for(var command in state){var button=this.toolbar_.getChild(this.getComponentId(command));if(button){var value=state[command];if(button.updateFromValue)button.updateFromValue(value);else button.setChecked(!!value)}}};
kemia.controller.ToolbarController.prototype.handleAction=function(e){var command=this.getCommand(e.target.getId());var value=e.target.getValue();var checked;if(e.target.isChecked)checked=e.target.isChecked();this.editor_.execCommand(command,value,checked,e)};goog.provide("kemia.model.Reaction");goog.require("kemia.model.Molecule");goog.require("goog.math.Box");goog.require("goog.math.Rect");goog.require("goog.debug.Logger");kemia.model.Reaction=function(){this.header="";this.reactants=[];this.products=[];this.arrows=[];this.pluses=[];this.reagentsText="";this.conditionsText=""};kemia.model.Reaction.prototype.addReactant=function(mol){this.reactants.push(mol);mol.reaction=this};
kemia.model.Reaction.prototype.addProduct=function(mol){this.products.push(mol);mol.reaction=this};kemia.model.Reaction.prototype.isReactant=function(mol){return goog.array.contains(this.reactants,mol)};kemia.model.Reaction.prototype.isProduct=function(mol){return goog.array.contains(this.products,mol)};
kemia.model.Reaction.prototype.removeMolecule=function(mol){if(goog.array.contains(this.reactants,mol)){goog.array.remove(this.reactants,mol);mol.reaction=undefined}else if(goog.array.contains(this.products,mol)){goog.array.remove(this.products,mol);mol.reaction=undefined}};kemia.model.Reaction.prototype.addArrow=function(coord){this.arrows.push(coord);coord.reaction=this};kemia.model.Reaction.prototype.removeArrow=function(coord){goog.array.remove(this.arrows,coord);coord.reaction=undefined};
kemia.model.Reaction.prototype.addPlus=function(coord){this.pluses.push(coord);coord.reaction=this};kemia.model.Reaction.prototype.removePlus=function(coord){goog.array.remove(this.pluses,coord);coord.reaction=undefined};kemia.model.Reaction.prototype.removeArrowOrPlus=function(coord){if(goog.array.contains(this.arrows,coord))this.removeArrow(coord);else if(goog.array.contains(this.pluses,coord))this.removePlus(coord)};
kemia.model.Reaction.prototype.generatePlusCoords=function(molecules){var previousMol;goog.array.forEach(molecules,function(mol){if(previousMol){var center=this.center([previousMol,mol]);this.addPlus(center)}previousMol=mol},this)};kemia.model.Reaction.prototype.generateArrowCoords=function(reactants,products){var r_box=this.boundingBox(reactants);var p_box=this.boundingBox(products);this.addArrow(new goog.math.Coordinate((r_box.right+p_box.left)/2,(r_box.top+p_box.bottom)/2))};
kemia.model.Reaction.prototype.boundingBox=function(molecules){var atoms=goog.array.flatten(goog.array.map(molecules,function(mol){return mol.atoms}));var coords=goog.array.map(atoms,function(a){return a.coord});return goog.math.Box.boundingBox.apply(null,coords)};kemia.model.Reaction.prototype.center=function(molecules){var bbox=this.boundingBox(molecules);return new goog.math.Coordinate((bbox.left+bbox.right)/2,(bbox.top+bbox.bottom)/2)};
kemia.model.Reaction.prototype.removeOverlap=function(){var margin=4;var molecules=goog.array.concat(this.reactants,this.products);var accumulated_rect;goog.array.forEach(molecules,function(mol){var mol_rect=goog.math.Rect.createFromBox(this.boundingBox([mol]));if(accumulated_rect){if(goog.math.Rect.intersection(accumulated_rect,mol_rect))this.translateMolecule(mol,new goog.math.Coordinate(margin+accumulated_rect.left+accumulated_rect.width-mol_rect.left,0));accumulated_rect.boundingRect(goog.math.Rect.createFromBox(this.boundingBox([mol])))}else accumulated_rect=
mol_rect},this)};kemia.model.Reaction.prototype.translateMolecule=function(molecule,coord){goog.array.forEach(molecule.atoms,function(a){a.coord=goog.math.Coordinate.sum(a.coord,coord)});return molecule};kemia.model.Reaction.prototype.rotateMolecule=function(molecule,degrees,center){var trans=kemia.graphics.AffineTransform.getRotateInstance(goog.math.toRadians(degrees),center.x,center.y);goog.array.forEach(molecule.atoms,function(a){a.coord=trans.transformCoords([a.coord])[0]});return molecule};goog.provide("kemia.io.json");goog.require("kemia.model.Reaction");goog.require("kemia.model.Molecule");goog.require("kemia.model.Bond");goog.require("kemia.model.Atom");goog.require("goog.json");goog.require("goog.array");goog.exportSymbol("kemia.io.json.readReaction",kemia.io.json.readReaction);
kemia.io.json.BondType={SINGLE_BOND:"SINGLE_BOND",DOUBLE_BOND:"DOUBLE_BOND",TRIPLE_BOND:"TRIPLE_BOND",QUADRUPLE_BOND:"QUADRUPLE_BOND",AROMATIC:"AROMATIC",SINGLE_OR_DOUBLE:"SINGLE_OR_DOUBLE",SINGLE_OR_AROMATIC:"SINGLE_OR_AROMATIC",DOUBLE_OR_AROMATIC:"DOUBLE_OR_AROMATIC",ANY:"ANY"};kemia.io.json.StereoType={NOT_STEREO:"NOT_STEREO",SINGLE_BOND_UP:"SINGLE_BOND_UP",SINGLE_BOND_UP_OR_DOWN:"SINGLE_BOND_UP_OR_DOWN",SINGLE_BOND_DOWN:"SINGLE_BOND_DOWN"};
kemia.io.json.getTypeCode=function(bond){if(bond.order==1)return kemia.io.json.BondType.SINGLE_BOND;if(bond.order==2)return kemia.io.json.BondType.DOUBLE_BOND;if(bond.order==3)return kemia.io.json.BondType.TRIPLE_BOND;throw new Error("Invalid bond type ["+bond+"]");};
kemia.io.json.getStereoCode=function(bond){if(bond.stereo=="up")return kemia.io.json.StereoType.SINGLE_BOND_UP;if(bond.stereo=="down")return kemia.io.json.StereoType.SINGLE_BOND_DOWN;if(bond.stereo=="up_or_down")return kemia.io.json.StereoType.SINGLE_BOND_UP_OR_DOWN;return kemia.io.json.StereoType.NOT_STEREO};
kemia.io.json.createBond=function(type,stereo,source,target){switch(type){case kemia.io.json.BondType.SINGLE_BOND:switch(stereo){case kemia.io.json.StereoType.NOT_STEREO:return new kemia.model.Bond(source,target);case kemia.io.json.StereoType.SINGLE_BOND_UP:var bond=new kemia.model.Bond(source,target);bond.stereo="up";return bond;case kemia.io.json.StereoType.SINGLE_BOND_UP_OR_DOWN:var bond=new kemia.model.Bond(source,target);bond.stereo="up_or_down";return bond;case kemia.io.json.StereoType.SINGLE_BOND_DOWN:var bond=
new kemia.model.Bond(source,target);bond.stereo="down";return bond;default:throw new Error("invalid bond type/stereo ["+type+"]/["+stereo+"]");}case kemia.io.json.BondType.DOUBLE_BOND:return new kemia.model.Bond(source,target,2);case kemia.io.json.BondType.TRIPLE_BOND:return new kemia.model.Bond(source,target,3);case kemia.io.json.BondType.AROMATIC:var bond=new kemia.model.Bond(source,target);bond.aromatic=true;return bond;case kemia.io.json.BondType.SINGLE_OR_DOUBLE:case kemia.io.json.BondType.SINGLE_OR_AROMATIC:case kemia.io.json.BondType.DOUBLE_OR_AROMATIC:case kemia.io.json.BondType.ANY:default:throw new Error("invalid bond type/stereo ["+
type+"]/["+stereo+"]");}};kemia.io.json.readMolecule=function(arg){var jmol;if(arg.constructor==String)jmol=goog.json.parse(arg);else jmol=arg;var mol=new kemia.model.Molecule;mol.name=jmol.name;goog.array.forEach(jmol.atoms,function(a){mol.addAtom(new kemia.model.Atom(a.symbol,a.coord.x,a.coord.y,a.charge))});goog.array.forEach(jmol.bondindex,function(b){mol.addBond(kemia.io.json.createBond(b.type,b.stereo,mol.getAtom(b.source),mol.getAtom(b.target)))});return mol};kemia.io.json.writeMolecule=function(mol){return(new goog.json.Serializer).serialize(kemia.io.json.moleculeToJson(mol))};
kemia.io.json.moleculeToJson=function(mol){var atoms=goog.array.map(mol.atoms,function(a){return{symbol:a.symbol,coord:{x:a.coord.x,y:a.coord.y},charge:a.charge}});var bonds=goog.array.map(mol.bonds,function(b){var btype=kemia.io.json.getTypeCode(b);var bstereo=kemia.io.json.getStereoCode(b);return{source:mol.indexOfAtom(b.source),target:mol.indexOfAtom(b.target),type:btype,stereo:bstereo}});return{name:mol.name,atoms:atoms,bondindex:bonds}};
kemia.io.json.readReaction=function(arg){var jrxn;if(arg.constructor==String)jrxn=goog.json.parse(arg);else jrxn=arg;var rxn=new kemia.model.Reaction;rxn.header=jrxn.header;goog.array.forEach(jrxn.reactants,function(mol){rxn.addReactant(kemia.io.json.readMolecule(mol))},this);goog.array.forEach(jrxn.products,function(mol){rxn.addProduct(kemia.io.json.readMolecule(mol))},this);return rxn};
kemia.io.json.reactionToJson=function(rxn){var header=rxn.header;var reactants=goog.array.map(rxn.reactants,kemia.io.json.moleculeToJson);var products=goog.array.map(rxn.products,kemia.io.json.moleculeToJson);return{header:header,reactants:reactants,products:products}};kemia.io.json.writeReaction=function(rxn){return(new goog.json.Serializer).serialize(kemia.io.json.reactionToJson(rxn))};goog.provide("goog.debug.Error");goog.debug.Error=function(opt_msg){this.stack=(new Error).stack||"";if(opt_msg)this.message=String(opt_msg)};goog.inherits(goog.debug.Error,Error);goog.debug.Error.prototype.name="CustomError";goog.provide("goog.asserts");goog.provide("goog.asserts.AssertionError");goog.require("goog.debug.Error");goog.require("goog.string");goog.asserts.ENABLE_ASSERTS=goog.DEBUG;goog.asserts.AssertionError=function(messagePattern,messageArgs){messageArgs.unshift(messagePattern);goog.debug.Error.call(this,goog.string.subs.apply(null,messageArgs));messageArgs.shift();this.messagePattern=messagePattern};goog.inherits(goog.asserts.AssertionError,goog.debug.Error);
goog.asserts.AssertionError.prototype.name="AssertionError";goog.asserts.doAssertFailure_=function(defaultMessage,defaultArgs,givenMessage,givenArgs){var message="Assertion failed";if(givenMessage){message+=": "+givenMessage;var args=givenArgs}else if(defaultMessage){message+=": "+defaultMessage;args=defaultArgs}throw new goog.asserts.AssertionError(""+message,args||[]);};
goog.asserts.assert=function(condition,opt_message,var_args){if(goog.asserts.ENABLE_ASSERTS&&!condition)goog.asserts.doAssertFailure_("",null,opt_message,Array.prototype.slice.call(arguments,2))};goog.asserts.fail=function(opt_message,var_args){if(goog.asserts.ENABLE_ASSERTS)throw new goog.asserts.AssertionError("Failure"+(opt_message?": "+opt_message:""),Array.prototype.slice.call(arguments,1));};
goog.asserts.assertNumber=function(value,opt_message,var_args){if(goog.asserts.ENABLE_ASSERTS&&!goog.isNumber(value))goog.asserts.doAssertFailure_("Expected number but got %s.",[value],opt_message,Array.prototype.slice.call(arguments,2));return value};goog.asserts.assertString=function(value,opt_message,var_args){if(goog.asserts.ENABLE_ASSERTS&&!goog.isString(value))goog.asserts.doAssertFailure_("Expected string but got %s.",[value],opt_message,Array.prototype.slice.call(arguments,2));return value};
goog.asserts.assertFunction=function(value,opt_message,var_args){if(goog.asserts.ENABLE_ASSERTS&&!goog.isFunction(value))goog.asserts.doAssertFailure_("Expected function but got %s.",[value],opt_message,Array.prototype.slice.call(arguments,2));return value};goog.asserts.assertObject=function(value,opt_message,var_args){if(goog.asserts.ENABLE_ASSERTS&&!goog.isObject(value))goog.asserts.doAssertFailure_("Expected object but got %s.",[value],opt_message,Array.prototype.slice.call(arguments,2));return value};
goog.asserts.assertArray=function(value,opt_message,var_args){if(goog.asserts.ENABLE_ASSERTS&&!goog.isArray(value))goog.asserts.doAssertFailure_("Expected array but got %s.",[value],opt_message,Array.prototype.slice.call(arguments,2));return value};goog.asserts.assertInstanceof=function(value,type,opt_message,var_args){if(goog.asserts.ENABLE_ASSERTS&&!(value instanceof type))goog.asserts.doAssertFailure_("instanceof check failed.",null,opt_message,Array.prototype.slice.call(arguments,3))};goog.provide("goog.i18n.DateTimeSymbols");goog.provide("goog.i18n.DateTimeSymbols_ar");goog.provide("goog.i18n.DateTimeSymbols_bg");goog.provide("goog.i18n.DateTimeSymbols_bn");goog.provide("goog.i18n.DateTimeSymbols_ca");goog.provide("goog.i18n.DateTimeSymbols_cs");goog.provide("goog.i18n.DateTimeSymbols_da");goog.provide("goog.i18n.DateTimeSymbols_de");goog.provide("goog.i18n.DateTimeSymbols_de_AT");goog.provide("goog.i18n.DateTimeSymbols_de_CH");goog.provide("goog.i18n.DateTimeSymbols_el");goog.provide("goog.i18n.DateTimeSymbols_en");
goog.provide("goog.i18n.DateTimeSymbols_en_AU");goog.provide("goog.i18n.DateTimeSymbols_en_GB");goog.provide("goog.i18n.DateTimeSymbols_en_IE");goog.provide("goog.i18n.DateTimeSymbols_en_IN");goog.provide("goog.i18n.DateTimeSymbols_en_ISO");goog.provide("goog.i18n.DateTimeSymbols_en_SG");goog.provide("goog.i18n.DateTimeSymbols_en_US");goog.provide("goog.i18n.DateTimeSymbols_en_ZA");goog.provide("goog.i18n.DateTimeSymbols_es");goog.provide("goog.i18n.DateTimeSymbols_et");goog.provide("goog.i18n.DateTimeSymbols_eu");
goog.provide("goog.i18n.DateTimeSymbols_fa");goog.provide("goog.i18n.DateTimeSymbols_fi");goog.provide("goog.i18n.DateTimeSymbols_fil");goog.provide("goog.i18n.DateTimeSymbols_fr");goog.provide("goog.i18n.DateTimeSymbols_fr_CA");goog.provide("goog.i18n.DateTimeSymbols_gl");goog.provide("goog.i18n.DateTimeSymbols_gsw");goog.provide("goog.i18n.DateTimeSymbols_gu");goog.provide("goog.i18n.DateTimeSymbols_he");goog.provide("goog.i18n.DateTimeSymbols_hi");goog.provide("goog.i18n.DateTimeSymbols_hr");goog.provide("goog.i18n.DateTimeSymbols_hu");
goog.provide("goog.i18n.DateTimeSymbols_id");goog.provide("goog.i18n.DateTimeSymbols_in");goog.provide("goog.i18n.DateTimeSymbols_is");goog.provide("goog.i18n.DateTimeSymbols_it");goog.provide("goog.i18n.DateTimeSymbols_iw");goog.provide("goog.i18n.DateTimeSymbols_ja");goog.provide("goog.i18n.DateTimeSymbols_kn");goog.provide("goog.i18n.DateTimeSymbols_ko");goog.provide("goog.i18n.DateTimeSymbols_ln");goog.provide("goog.i18n.DateTimeSymbols_lt");goog.provide("goog.i18n.DateTimeSymbols_lv");goog.provide("goog.i18n.DateTimeSymbols_ml");
goog.provide("goog.i18n.DateTimeSymbols_mo");goog.provide("goog.i18n.DateTimeSymbols_mr");goog.provide("goog.i18n.DateTimeSymbols_ms");goog.provide("goog.i18n.DateTimeSymbols_mt");goog.provide("goog.i18n.DateTimeSymbols_nl");goog.provide("goog.i18n.DateTimeSymbols_no");goog.provide("goog.i18n.DateTimeSymbols_or");goog.provide("goog.i18n.DateTimeSymbols_pl");goog.provide("goog.i18n.DateTimeSymbols_pt");goog.provide("goog.i18n.DateTimeSymbols_pt_BR");goog.provide("goog.i18n.DateTimeSymbols_pt_PT");
goog.provide("goog.i18n.DateTimeSymbols_ro");goog.provide("goog.i18n.DateTimeSymbols_ru");goog.provide("goog.i18n.DateTimeSymbols_sk");goog.provide("goog.i18n.DateTimeSymbols_sl");goog.provide("goog.i18n.DateTimeSymbols_sq");goog.provide("goog.i18n.DateTimeSymbols_sr");goog.provide("goog.i18n.DateTimeSymbols_sv");goog.provide("goog.i18n.DateTimeSymbols_ta");goog.provide("goog.i18n.DateTimeSymbols_te");goog.provide("goog.i18n.DateTimeSymbols_th");goog.provide("goog.i18n.DateTimeSymbols_tl");goog.provide("goog.i18n.DateTimeSymbols_tr");
goog.provide("goog.i18n.DateTimeSymbols_uk");goog.provide("goog.i18n.DateTimeSymbols_ur");goog.provide("goog.i18n.DateTimeSymbols_vi");goog.provide("goog.i18n.DateTimeSymbols_zh");goog.provide("goog.i18n.DateTimeSymbols_zh_CN");goog.provide("goog.i18n.DateTimeSymbols_zh_HK");goog.provide("goog.i18n.DateTimeSymbols_zh_TW");
goog.i18n.DateTimeSymbols_en_ISO={ERAS:["BC","AD"],ERANAMES:["Before Christ","Anno Domini"],NARROWMONTHS:["J","F","M","A","M","J","J","A","S","O","N","D"],STANDALONENARROWMONTHS:["J","F","M","A","M","J","J","A","S","O","N","D"],MONTHS:["January","February","March","April","May","June","July","August","September","October","November","December"],STANDALONEMONTHS:["January","February","March","April","May","June","July","August","September","October","November","December"],SHORTMONTHS:["Jan","Feb",
"Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],STANDALONESHORTMONTHS:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],WEEKDAYS:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],STANDALONEWEEKDAYS:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],SHORTWEEKDAYS:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],STANDALONESHORTWEEKDAYS:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],NARROWWEEKDAYS:["S","M","T","W","T","F","S"],
STANDALONENARROWWEEKDAYS:["S","M","T","W","T","F","S"],SHORTQUARTERS:["Q1","Q2","Q3","Q4"],QUARTERS:["1st quarter","2nd quarter","3rd quarter","4th quarter"],AMPMS:["AM","PM"],DATEFORMATS:["EEEE, y MMMM dd","y MMMM d","y MMM d","yyyy-MM-dd"],TIMEFORMATS:["HH:mm:ss v","HH:mm:ss z","HH:mm:ss","HH:mm"],AVAILABLEFORMATS:{Md:"M/d",MMMMd:"MMMM d",MMMd:"MMM d"},FIRSTDAYOFWEEK:0,WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_ar={ERAS:["\u0642.\u0645","\u0645"],ERANAMES:["\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f","\u0645\u064a\u0644\u0627\u062f\u064a"],NARROWMONTHS:["\u064a","\u0641","\u0645","\u0623","\u0648","\u0646","\u0644","\u063a","\u0633","\u0643","\u0628","\u062f"],STANDALONENARROWMONTHS:["\u064a","\u0641","\u0645","\u0623","\u0648","\u0646","\u0644","\u063a","\u0633","\u0643","\u0628","\u062f"],MONTHS:["\u064a\u0646\u0627\u064a\u0631","\u0641\u0628\u0631\u0627\u064a\u0631",
"\u0645\u0627\u0631\u0633","\u0623\u0628\u0631\u064a\u0644","\u0645\u0627\u064a\u0648","\u064a\u0648\u0646\u064a\u0648","\u064a\u0648\u0644\u064a\u0648","\u0623\u063a\u0633\u0637\u0633","\u0633\u0628\u062a\u0645\u0628\u0631","\u0623\u0643\u062a\u0648\u0628\u0631","\u0646\u0648\u0641\u0645\u0628\u0631","\u062f\u064a\u0633\u0645\u0628\u0631"],STANDALONEMONTHS:["\u064a\u0646\u0627\u064a\u0631","\u0641\u0628\u0631\u0627\u064a\u0631","\u0645\u0627\u0631\u0633","\u0623\u0628\u0631\u064a\u0644","\u0645\u0627\u064a\u0648",
"\u064a\u0648\u0646\u064a\u0648","\u064a\u0648\u0644\u064a\u0648","\u0623\u063a\u0633\u0637\u0633","\u0633\u0628\u062a\u0645\u0628\u0631","\u0623\u0643\u062a\u0648\u0628\u0631","\u0646\u0648\u0641\u0645\u0628\u0631","\u062f\u064a\u0633\u0645\u0628\u0631"],SHORTMONTHS:["\u064a\u0646\u0627\u064a\u0631","\u0641\u0628\u0631\u0627\u064a\u0631","\u0645\u0627\u0631\u0633","\u0623\u0628\u0631\u064a\u0644","\u0645\u0627\u064a\u0648","\u064a\u0648\u0646\u064a\u0648","\u064a\u0648\u0644\u064a\u0648","\u0623\u063a\u0633\u0637\u0633",
"\u0633\u0628\u062a\u0645\u0628\u0631","\u0623\u0643\u062a\u0648\u0628\u0631","\u0646\u0648\u0641\u0645\u0628\u0631","\u062f\u064a\u0633\u0645\u0628\u0631"],STANDALONESHORTMONTHS:["\u064a\u0646\u0627\u064a\u0631","\u0641\u0628\u0631\u0627\u064a\u0631","\u0645\u0627\u0631\u0633","\u0623\u0628\u0631\u064a\u0644","\u0645\u0627\u064a\u0648","\u064a\u0648\u0646\u064a\u0648","\u064a\u0648\u0644\u064a\u0648","\u0623\u063a\u0633\u0637\u0633","\u0633\u0628\u062a\u0645\u0628\u0631","\u0623\u0643\u062a\u0648\u0628\u0631",
"\u0646\u0648\u0641\u0645\u0628\u0631","\u062f\u064a\u0633\u0645\u0628\u0631"],WEEKDAYS:["\u0627\u0644\u0623\u062d\u062f","\u0627\u0644\u0625\u062b\u0646\u064a\u0646","\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621","\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621","\u0627\u0644\u062e\u0645\u064a\u0633","\u0627\u0644\u062c\u0645\u0639\u0629","\u0627\u0644\u0633\u0628\u062a"],STANDALONEWEEKDAYS:["\u0627\u0644\u0623\u062d\u062f","\u0627\u0644\u0625\u062b\u0646\u064a\u0646","\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
"\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621","\u0627\u0644\u062e\u0645\u064a\u0633","\u0627\u0644\u062c\u0645\u0639\u0629","\u0627\u0644\u0633\u0628\u062a"],SHORTWEEKDAYS:["\u0623\u062d\u062f","\u0625\u062b\u0646\u064a\u0646","\u062b\u0644\u0627\u062b\u0627\u0621","\u0623\u0631\u0628\u0639\u0627\u0621","\u062e\u0645\u064a\u0633","\u062c\u0645\u0639\u0629","\u0633\u0628\u062a"],STANDALONESHORTWEEKDAYS:["\u0623\u062d\u062f","\u0625\u062b\u0646\u064a\u0646","\u062b\u0644\u0627\u062b\u0627\u0621",
"\u0623\u0631\u0628\u0639\u0627\u0621","\u062e\u0645\u064a\u0633","\u062c\u0645\u0639\u0629","\u0633\u0628\u062a"],NARROWWEEKDAYS:["\u062d","\u0646","\u062b","\u0631","\u062e","\u062c","\u0633"],STANDALONENARROWWEEKDAYS:["\u062d","\u0646","\u062b","\u0631","\u062e","\u062c","\u0633"],SHORTQUARTERS:["\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u0623\u0648\u0644","\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u062b\u0627\u0646\u064a","\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u062b\u0627\u0644\u062b",
"\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u0631\u0627\u0628\u0639"],QUARTERS:["\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u0623\u0648\u0644","\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u062b\u0627\u0646\u064a","\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u062b\u0627\u0644\u062b","\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u0631\u0627\u0628\u0639"],AMPMS:["\u0635","\u0645"],DATEFORMATS:["EEEE\u060c d MMMM\u060c y","d MMMM\u060c y","dd/MM/yyyy","d/M/yyyy"],TIMEFORMATS:["zzzz h:mm:ss a","z h:mm:ss a",
"h:mm:ss a","h:mm a"],AVAILABLEFORMATS:{Md:"d/M",MMMMd:"d MMMM",MMMd:"d MMM"},FIRSTDAYOFWEEK:5,WEEKENDRANGE:[4,5],FIRSTWEEKCUTOFFDAY:1};
goog.i18n.DateTimeSymbols_bg={ERAS:["\u043f\u0440. \u043d. \u0435.","\u043e\u0442 \u043d. \u0435."],ERANAMES:["\u043f\u0440.\u0425\u0440.","\u0441\u043b.\u0425\u0440."],NARROWMONTHS:["\u044f","\u0444","\u043c","\u0430","\u043c","\u044e","\u044e","\u0430","\u0441","\u043e","\u043d","\u0434"],STANDALONENARROWMONTHS:["\u044f","\u0444","\u043c","\u0430","\u043c","\u044e","\u044e","\u0430","\u0441","\u043e","\u043d","\u0434"],MONTHS:["\u044f\u043d\u0443\u0430\u0440\u0438","\u0444\u0435\u0432\u0440\u0443\u0430\u0440\u0438",
"\u043c\u0430\u0440\u0442","\u0430\u043f\u0440\u0438\u043b","\u043c\u0430\u0439","\u044e\u043d\u0438","\u044e\u043b\u0438","\u0430\u0432\u0433\u0443\u0441\u0442","\u0441\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438","\u043e\u043a\u0442\u043e\u043c\u0432\u0440\u0438","\u043d\u043e\u0435\u043c\u0432\u0440\u0438","\u0434\u0435\u043a\u0435\u043c\u0432\u0440\u0438"],STANDALONEMONTHS:["\u044f\u043d\u0443\u0430\u0440\u0438","\u0444\u0435\u0432\u0440\u0443\u0430\u0440\u0438","\u043c\u0430\u0440\u0442",
"\u0430\u043f\u0440\u0438\u043b","\u043c\u0430\u0439","\u044e\u043d\u0438","\u044e\u043b\u0438","\u0430\u0432\u0433\u0443\u0441\u0442","\u0441\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438","\u043e\u043a\u0442\u043e\u043c\u0432\u0440\u0438","\u043d\u043e\u0435\u043c\u0432\u0440\u0438","\u0434\u0435\u043a\u0435\u043c\u0432\u0440\u0438"],SHORTMONTHS:["\u044f\u043d.","\u0444\u0435\u0432\u0440.","\u043c\u0430\u0440\u0442","\u0430\u043f\u0440.","\u043c\u0430\u0439","\u044e\u043d\u0438","\u044e\u043b\u0438",
"\u0430\u0432\u0433.","\u0441\u0435\u043f\u0442.","\u043e\u043a\u0442.","\u043d\u043e\u0435\u043c.","\u0434\u0435\u043a."],STANDALONESHORTMONTHS:["\u044f\u043d.","\u0444\u0435\u0432\u0440.","\u043c\u0430\u0440\u0442","\u0430\u043f\u0440.","\u043c\u0430\u0439","\u044e\u043d\u0438","\u044e\u043b\u0438","\u0430\u0432\u0433.","\u0441\u0435\u043f\u0442.","\u043e\u043a\u0442.","\u043d\u043e\u0435\u043c.","\u0434\u0435\u043a."],WEEKDAYS:["\u043d\u0435\u0434\u0435\u043b\u044f","\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a",
"\u0432\u0442\u043e\u0440\u043d\u0438\u043a","\u0441\u0440\u044f\u0434\u0430","\u0447\u0435\u0442\u0432\u044a\u0440\u0442\u044a\u043a","\u043f\u0435\u0442\u044a\u043a","\u0441\u044a\u0431\u043e\u0442\u0430"],STANDALONEWEEKDAYS:["\u043d\u0435\u0434\u0435\u043b\u044f","\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a","\u0432\u0442\u043e\u0440\u043d\u0438\u043a","\u0441\u0440\u044f\u0434\u0430","\u0447\u0435\u0442\u0432\u044a\u0440\u0442\u044a\u043a","\u043f\u0435\u0442\u044a\u043a","\u0441\u044a\u0431\u043e\u0442\u0430"],
SHORTWEEKDAYS:["\u043d\u0434","\u043f\u043d","\u0432\u0442","\u0441\u0440","\u0447\u0442","\u043f\u0442","\u0441\u0431"],STANDALONESHORTWEEKDAYS:["\u043d\u0434","\u043f\u043d","\u0432\u0442","\u0441\u0440","\u0447\u0442","\u043f\u0442","\u0441\u0431"],NARROWWEEKDAYS:["\u043d","\u043f","\u0432","\u0441","\u0447","\u043f","\u0441"],STANDALONENARROWWEEKDAYS:["\u043d","\u043f","\u0432","\u0441","\u0447","\u043f","\u0441"],SHORTQUARTERS:["I \u0442\u0440\u0438\u043c.","II \u0442\u0440\u0438\u043c.","III \u0442\u0440\u0438\u043c.",
"IV \u0442\u0440\u0438\u043c."],QUARTERS:["1-\u0432\u043e \u0442\u0440\u0438\u043c\u0435\u0441\u0435\u0447\u0438\u0435","2-\u0440\u043e \u0442\u0440\u0438\u043c\u0435\u0441\u0435\u0447\u0438\u0435","3-\u0442\u043e \u0442\u0440\u0438\u043c\u0435\u0441\u0435\u0447\u0438\u0435","4-\u0442\u043e \u0442\u0440\u0438\u043c\u0435\u0441\u0435\u0447\u0438\u0435"],AMPMS:["\u043f\u0440. \u043e\u0431.","\u0441\u043b. \u043e\u0431."],DATEFORMATS:["dd MMMM y, EEEE","dd MMMM y","dd.MM.yyyy","dd.MM.yy"],TIMEFORMATS:["HH:mm:ss zzzz",
"HH:mm:ss z","HH:mm:ss","HH:mm"],AVAILABLEFORMATS:{Md:"M-d",MMMMd:"d MMMM",MMMd:"MMM d"},FIRSTDAYOFWEEK:0,WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_bn={ERAS:["\u0996\u09c3\u09b7\u09cd\u099f\u09aa\u09c2\u09b0\u09cd\u09ac","\u0996\u09c3\u09b7\u09cd\u099f\u09be\u09ac\u09cd\u09a6"],ERANAMES:["\u0996\u09c3\u09b7\u09cd\u099f\u09aa\u09c2\u09b0\u09cd\u09ac","\u0996\u09c3\u09b7\u09cd\u099f\u09be\u09ac\u09cd\u09a6"],NARROWMONTHS:["\u099c\u09be","\u09ab\u09c7","\u09ae\u09be","\u098f","\u09ae\u09c7","\u099c\u09c1\u09a8","\u099c\u09c1","\u0986","\u09b8\u09c7","\u0985","\u09a8","\u09a1\u09bf"],STANDALONENARROWMONTHS:["\u099c\u09be",
"\u09ab\u09c7","\u09ae\u09be","\u098f","\u09ae\u09c7","\u099c\u09c1\u09a8","\u099c\u09c1","\u0986","\u09b8\u09c7","\u0985","\u09a8","\u09a1\u09bf"],MONTHS:["\u099c\u09be\u09a8\u09c1\u09af\u09bc\u09be\u09b0\u09c0","\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09af\u09bc\u09be\u09b0\u09c0","\u09ae\u09be\u09b0\u09cd\u099a","\u098f\u09aa\u09cd\u09b0\u09bf\u09b2","\u09ae\u09c7","\u099c\u09c1\u09a8","\u099c\u09c1\u09b2\u09be\u0987","\u0986\u0997\u09b8\u09cd\u099f","\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0",
"\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0","\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0","\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0"],STANDALONEMONTHS:["\u099c\u09be\u09a8\u09c1\u09af\u09bc\u09be\u09b0\u09c0","\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09af\u09bc\u09be\u09b0\u09c0","\u09ae\u09be\u09b0\u09cd\u099a","\u098f\u09aa\u09cd\u09b0\u09bf\u09b2","\u09ae\u09c7","\u099c\u09c1\u09a8","\u099c\u09c1\u09b2\u09be\u0987","\u0986\u0997\u09b8\u09cd\u099f","\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0",
"\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0","\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0","\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0"],SHORTMONTHS:["\u099c\u09be\u09a8\u09c1\u09af\u09bc\u09be\u09b0\u09c0","\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09af\u09bc\u09be\u09b0\u09c0","\u09ae\u09be\u09b0\u09cd\u099a","\u098f\u09aa\u09cd\u09b0\u09bf\u09b2","\u09ae\u09c7","\u099c\u09c1\u09a8","\u099c\u09c1\u09b2\u09be\u0987","\u0986\u0997\u09b8\u09cd\u099f","\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0",
"\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0","\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0","\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0"],STANDALONESHORTMONTHS:["\u099c\u09be\u09a8\u09c1\u09af\u09bc\u09be\u09b0\u09c0","\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09af\u09bc\u09be\u09b0\u09c0","\u09ae\u09be\u09b0\u09cd\u099a","\u098f\u09aa\u09cd\u09b0\u09bf\u09b2","\u09ae\u09c7","\u099c\u09c1\u09a8","\u099c\u09c1\u09b2\u09be\u0987","\u0986\u0997\u09b8\u09cd\u099f","\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0",
"\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0","\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0","\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0"],WEEKDAYS:["\u09b0\u09ac\u09bf\u09ac\u09be\u09b0","\u09b8\u09cb\u09ae\u09ac\u09be\u09b0","\u09ae\u0999\u09cd\u0997\u09b2\u09ac\u09be\u09b0","\u09ac\u09c1\u09a7\u09ac\u09be\u09b0","\u09ac\u09c3\u09b9\u09b7\u09cd\u09aa\u09a4\u09bf\u09ac\u09be\u09b0","\u09b6\u09c1\u0995\u09cd\u09b0\u09ac\u09be\u09b0","\u09b6\u09a8\u09bf\u09ac\u09be\u09b0"],STANDALONEWEEKDAYS:["\u09b0\u09ac\u09bf\u09ac\u09be\u09b0",
"\u09b8\u09cb\u09ae\u09ac\u09be\u09b0","\u09ae\u0999\u09cd\u0997\u09b2\u09ac\u09be\u09b0","\u09ac\u09c1\u09a7\u09ac\u09be\u09b0","\u09ac\u09c3\u09b9\u09b7\u09cd\u09aa\u09a4\u09bf\u09ac\u09be\u09b0","\u09b6\u09c1\u0995\u09cd\u09b0\u09ac\u09be\u09b0","\u09b6\u09a8\u09bf\u09ac\u09be\u09b0"],SHORTWEEKDAYS:["\u09b0\u09ac\u09bf","\u09b8\u09cb\u09ae","\u09ae\u0999\u09cd\u0997\u09b2","\u09ac\u09c1\u09a7","\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf","\u09b6\u09c1\u0995\u09cd\u09b0","\u09b6\u09a8\u09bf"],
STANDALONESHORTWEEKDAYS:["\u09b0\u09ac\u09bf","\u09b8\u09cb\u09ae","\u09ae\u0999\u09cd\u0997\u09b2","\u09ac\u09c1\u09a7","\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf","\u09b6\u09c1\u0995\u09cd\u09b0","\u09b6\u09a8\u09bf"],NARROWWEEKDAYS:["\u09b0","\u09b8\u09cb","\u09ae","\u09ac\u09c1","\u09ac\u09c3","\u09b6\u09c1","\u09b6"],STANDALONENARROWWEEKDAYS:["\u09b0","\u09b8\u09cb","\u09ae","\u09ac\u09c1","\u09ac\u09c3","\u09b6\u09c1","\u09b6"],SHORTQUARTERS:["\u099a\u09a4\u09c1\u09b0\u09cd\u09a5\u09be\u0982\u09b6 \u09e7",
"\u099a\u09a4\u09c1\u09b0\u09cd\u09a5\u09be\u0982\u09b6 \u09e8","\u099a\u09a4\u09c1\u09b0\u09cd\u09a5\u09be\u0982\u09b6 \u09e9","\u099a\u09a4\u09c1\u09b0\u09cd\u09a5\u09be\u0982\u09b6 \u09ea"],QUARTERS:["\u09aa\u09cd\u09b0\u09a5\u09ae \u099a\u09a4\u09c1\u09b0\u09cd\u09a5\u09be\u0982\u09b6","\u09a6\u09cd\u09ac\u09bf\u09a4\u09c0\u09af\u09bc \u099a\u09a4\u09c1\u09b0\u09cd\u09a5\u09be\u0982\u09b6","\u09a4\u09c3\u09a4\u09c0\u09af\u09bc \u099a\u09a4\u09c1\u09b0\u09cd\u09a5\u09be\u0982\u09b6","\u099a\u09a4\u09c1\u09b0\u09cd\u09a5 \u099a\u09a4\u09c1\u09b0\u09cd\u09a5\u09be\u0982\u09b6"],
AMPMS:["am","pm"],DATEFORMATS:["EEEE, d MMMM, y","d MMMM, y","d MMM, y","d/M/yy"],TIMEFORMATS:["h:mm:ss a zzzz","h:mm:ss a z","h:mm:ss a","h:mm a"],AVAILABLEFORMATS:{Md:"d/M",MMMMd:"d MMMM",MMMd:"d MMM"},FIRSTDAYOFWEEK:0,WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_ca={ERAS:["aC","dC"],ERANAMES:["aC","dC"],NARROWMONTHS:["g","f","m","a","m","j","j","a","s","o","n","d"],STANDALONENARROWMONTHS:["g","f","m","a","m","j","j","a","s","o","n","d"],MONTHS:["de gener","de febrer","de mar\u00e7","d\u2019abril","de maig","de juny","de juliol","d\u2019agost","de setembre","d\u2019octubre","de novembre","de desembre"],STANDALONEMONTHS:["gener","febrer","mar\u00e7","abril","maig","juny","juliol","agost","setembre","octubre","novembre","desembre"],
SHORTMONTHS:["gen.","febr.","mar\u00e7","abr.","maig","juny","jul.","ag.","set.","oct.","nov.","des."],STANDALONESHORTMONTHS:["gen.","febr.","mar\u00e7","abr.","maig","juny","jul.","ag.","set.","oct.","nov.","des."],WEEKDAYS:["diumenge","dilluns","dimarts","dimecres","dijous","divendres","dissabte"],STANDALONEWEEKDAYS:["diumenge","dilluns","dimarts","dimecres","dijous","divendres","dissabte"],SHORTWEEKDAYS:["dg.","dl.","dt.","dc.","dj.","dv.","ds."],STANDALONESHORTWEEKDAYS:["dg","dl","dt","dc","dj",
"dv","ds"],NARROWWEEKDAYS:["g","l","t","c","j","v","s"],STANDALONENARROWWEEKDAYS:["g","l","t","c","j","v","s"],SHORTQUARTERS:["1T","2T","3T","4T"],QUARTERS:["1r trimestre","2n trimestre","3r trimestre","4t trimestre"],AMPMS:["a.m.","p.m."],DATEFORMATS:["EEEE d MMMM 'de' y","d MMMM 'de' y","dd/MM/yyyy","dd/MM/yy"],TIMEFORMATS:["H:mm:ss zzzz","H:mm:ss z","H:mm:ss","H:mm"],AVAILABLEFORMATS:{Md:"d/M",MMMMd:"d MMMM",MMMd:"d MMM"},FIRSTDAYOFWEEK:0,WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_cs={ERAS:["p\u0159.Kr.","po Kr."],ERANAMES:["p\u0159.Kr.","po Kr."],NARROWMONTHS:["l","\u00fa","b","d","k","\u010d","\u010d","s","z","\u0159","l","p"],STANDALONENARROWMONTHS:["l","\u00fa","b","d","k","\u010d","\u010d","s","z","\u0159","l","p"],MONTHS:["ledna","\u00fanora","b\u0159ezna","dubna","kv\u011btna","\u010dervna","\u010dervence","srpna","z\u00e1\u0159\u00ed","\u0159\u00edjna","listopadu","prosince"],STANDALONEMONTHS:["leden","\u00fanor","b\u0159ezen","duben","kv\u011bten",
"\u010derven","\u010dervenec","srpen","z\u00e1\u0159\u00ed","\u0159\u00edjen","listopad","prosinec"],SHORTMONTHS:["1","2","3","4","5","6","7","8","9","10","11","12"],STANDALONESHORTMONTHS:["1.","2.","3.","4.","5.","6.","7.","8.","9.","10.","11.","12."],WEEKDAYS:["ned\u011ble","pond\u011bl\u00ed","\u00fater\u00fd","st\u0159eda","\u010dtvrtek","p\u00e1tek","sobota"],STANDALONEWEEKDAYS:["ned\u011ble","pond\u011bl\u00ed","\u00fater\u00fd","st\u0159eda","\u010dtvrtek","p\u00e1tek","sobota"],SHORTWEEKDAYS:["ne",
"po","\u00fat","st","\u010dt","p\u00e1","so"],STANDALONESHORTWEEKDAYS:["ne","po","\u00fat","st","\u010dt","p\u00e1","so"],NARROWWEEKDAYS:["N","P","\u00da","S","\u010c","P","S"],STANDALONENARROWWEEKDAYS:["N","P","\u00da","S","\u010c","P","S"],SHORTQUARTERS:["Q1","Q2","Q3","Q4"],QUARTERS:["1. \u010dtvrtlet\u00ed","2. \u010dtvrtlet\u00ed","3. \u010dtvrtlet\u00ed","4. \u010dtvrtlet\u00ed"],AMPMS:["dop.","odp."],DATEFORMATS:["EEEE, d. MMMM y","d. MMMM y","d.M.yyyy","d.M.yy"],TIMEFORMATS:["HH:mm:ss zzzz",
"HH:mm:ss z","H:mm:ss","H:mm"],AVAILABLEFORMATS:{Md:"d.M",MMMMd:"d. MMMM",MMMd:"MMM d"},FIRSTDAYOFWEEK:0,WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_da={ERAS:["f.Kr.","e.Kr."],ERANAMES:["f.Kr.","e.Kr."],NARROWMONTHS:["J","F","M","A","M","J","J","A","S","O","N","D"],STANDALONENARROWMONTHS:["J","F","M","A","M","J","J","A","S","O","N","D"],MONTHS:["januar","februar","marts","april","maj","juni","juli","august","september","oktober","november","december"],STANDALONEMONTHS:["januar","februar","marts","april","maj","juni","juli","august","september","oktober","november","december"],SHORTMONTHS:["jan.","feb.","mar.","apr.",
"maj","jun.","jul.","aug.","sep.","okt.","nov.","dec."],STANDALONESHORTMONTHS:["jan","feb","mar","apr","maj","jun","jul","aug","sep","okt","nov","dec"],WEEKDAYS:["s\u00f8ndag","mandag","tirsdag","onsdag","torsdag","fredag","l\u00f8rdag"],STANDALONEWEEKDAYS:["s\u00f8ndag","mandag","tirsdag","onsdag","torsdag","fredag","l\u00f8rdag"],SHORTWEEKDAYS:["s\u00f8n","man","tir","ons","tor","fre","l\u00f8r"],STANDALONESHORTWEEKDAYS:["s\u00f8n","man","tir","ons","tor","fre","l\u00f8r"],NARROWWEEKDAYS:["S","M",
"T","O","T","F","L"],STANDALONENARROWWEEKDAYS:["S","M","T","O","T","F","L"],SHORTQUARTERS:["K1","K2","K3","K4"],QUARTERS:["1. kvartal","2. kvartal","3. kvartal","4. kvartal"],AMPMS:["f.m.","e.m."],DATEFORMATS:["EEEE 'den' d. MMMM y","d. MMM y","dd/MM/yyyy","dd/MM/yy"],TIMEFORMATS:["HH.mm.ss zzzz","HH:mm:ss z","HH.mm.ss","HH.mm"],AVAILABLEFORMATS:{Md:"d/M",MMMMd:"d. MMMM",MMMd:"d. MMM"},FIRSTDAYOFWEEK:0,WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_de={ERAS:["v. Chr.","n. Chr."],ERANAMES:["v. Chr.","n. Chr."],NARROWMONTHS:["J","F","M","A","M","J","J","A","S","O","N","D"],STANDALONENARROWMONTHS:["J","F","M","A","M","J","J","A","S","O","N","D"],MONTHS:["Januar","Februar","M\u00e4rz","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],STANDALONEMONTHS:["Januar","Februar","M\u00e4rz","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],SHORTMONTHS:["Jan","Feb",
"M\u00e4r","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],STANDALONESHORTMONTHS:["Jan","Feb","M\u00e4r","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],WEEKDAYS:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],STANDALONEWEEKDAYS:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],SHORTWEEKDAYS:["So.","Mo.","Di.","Mi.","Do.","Fr.","Sa."],STANDALONESHORTWEEKDAYS:["So.","Mo.","Di.","Mi.","Do.","Fr.","Sa."],NARROWWEEKDAYS:["S","M","D",
"M","D","F","S"],STANDALONENARROWWEEKDAYS:["S","M","D","M","D","F","S"],SHORTQUARTERS:["Q1","Q2","Q3","Q4"],QUARTERS:["1. Quartal","2. Quartal","3. Quartal","4. Quartal"],AMPMS:["vorm.","nachm."],DATEFORMATS:["EEEE, d. MMMM y","d. MMMM y","dd.MM.yyyy","dd.MM.yy"],TIMEFORMATS:["HH:mm:ss zzzz","HH:mm:ss z","HH:mm:ss","HH:mm"],AVAILABLEFORMATS:{Md:"d.M.",MMMMd:"d. MMMM",MMMd:"d. MMM"},FIRSTDAYOFWEEK:0,WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_de_AT={ERAS:["v. Chr.","n. Chr."],ERANAMES:["v. Chr.","n. Chr."],NARROWMONTHS:["J","F","M","A","M","J","J","A","S","O","N","D"],STANDALONENARROWMONTHS:["J","F","M","A","M","J","J","A","S","O","N","D"],MONTHS:["J\u00e4nner","Februar","M\u00e4rz","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],STANDALONEMONTHS:["J\u00e4nner","Februar","M\u00e4rz","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],SHORTMONTHS:["J\u00e4n",
"Feb","M\u00e4r","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],STANDALONESHORTMONTHS:["J\u00e4n","Feb","M\u00e4r","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],WEEKDAYS:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],STANDALONEWEEKDAYS:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],SHORTWEEKDAYS:["So.","Mo.","Di.","Mi.","Do.","Fr.","Sa."],STANDALONESHORTWEEKDAYS:["So.","Mo.","Di.","Mi.","Do.","Fr.","Sa."],NARROWWEEKDAYS:["S",
"M","D","M","D","F","S"],STANDALONENARROWWEEKDAYS:["S","M","D","M","D","F","S"],SHORTQUARTERS:["Q1","Q2","Q3","Q4"],QUARTERS:["1. Quartal","2. Quartal","3. Quartal","4. Quartal"],AMPMS:["vorm.","nachm."],DATEFORMATS:["EEEE, dd. MMMM y","dd. MMMM y","dd.MM.yyyy","dd.MM.yy"],TIMEFORMATS:["HH:mm:ss zzzz","HH:mm:ss z","HH:mm:ss","HH:mm"],AVAILABLEFORMATS:{Md:"d.M.",MMMMd:"d. MMMM",MMMd:"d. MMM"},FIRSTDAYOFWEEK:0,WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:3};goog.i18n.DateTimeSymbols_de_CH=goog.i18n.DateTimeSymbols_de;
goog.i18n.DateTimeSymbols_el={ERAS:["\u03c0.\u03a7.","\u03bc.\u03a7."],ERANAMES:["\u03c0.\u03a7.","\u03bc.\u03a7."],NARROWMONTHS:["\u0399","\u03a6","\u039c","\u0391","\u039c","\u0399","\u0399","\u0391","\u03a3","\u039f","\u039d","\u0394"],STANDALONENARROWMONTHS:["\u0399","\u03a6","\u039c","\u0391","\u039c","\u0399","\u0399","\u0391","\u03a3","\u039f","\u039d","\u0394"],MONTHS:["\u0399\u03b1\u03bd\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5","\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5",
"\u039c\u03b1\u03c1\u03c4\u03af\u03bf\u03c5","\u0391\u03c0\u03c1\u03b9\u03bb\u03af\u03bf\u03c5","\u039c\u03b1\u0390\u03bf\u03c5","\u0399\u03bf\u03c5\u03bd\u03af\u03bf\u03c5","\u0399\u03bf\u03c5\u03bb\u03af\u03bf\u03c5","\u0391\u03c5\u03b3\u03bf\u03cd\u03c3\u03c4\u03bf\u03c5","\u03a3\u03b5\u03c0\u03c4\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5","\u039f\u03ba\u03c4\u03c9\u03b2\u03c1\u03af\u03bf\u03c5","\u039d\u03bf\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5","\u0394\u03b5\u03ba\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5"],
STANDALONEMONTHS:["\u0399\u03b1\u03bd\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2","\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2","\u039c\u03ac\u03c1\u03c4\u03b9\u03bf\u03c2","\u0391\u03c0\u03c1\u03af\u03bb\u03b9\u03bf\u03c2","\u039c\u03ac\u03b9\u03bf\u03c2","\u0399\u03bf\u03cd\u03bd\u03b9\u03bf\u03c2","\u0399\u03bf\u03cd\u03bb\u03b9\u03bf\u03c2","\u0391\u03cd\u03b3\u03bf\u03c5\u03c3\u03c4\u03bf\u03c2","\u03a3\u03b5\u03c0\u03c4\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2","\u039f\u03ba\u03c4\u03ce\u03b2\u03c1\u03b9\u03bf\u03c2",
"\u039d\u03bf\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2","\u0394\u03b5\u03ba\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2"],SHORTMONTHS:["\u0399\u03b1\u03bd","\u03a6\u03b5\u03b2","\u039c\u03b1\u03c1","\u0391\u03c0\u03c1","\u039c\u03b1\u03ca","\u0399\u03bf\u03c5\u03bd","\u0399\u03bf\u03c5\u03bb","\u0391\u03c5\u03b3","\u03a3\u03b5\u03c0","\u039f\u03ba\u03c4","\u039d\u03bf\u03b5","\u0394\u03b5\u03ba"],STANDALONESHORTMONTHS:["\u0399\u03b1\u03bd","\u03a6\u03b5\u03b2","\u039c\u03b1\u03c1","\u0391\u03c0\u03c1",
"\u039c\u03b1\u03ca","\u0399\u03bf\u03c5\u03bd","\u0399\u03bf\u03c5\u03bb","\u0391\u03c5\u03b3","\u03a3\u03b5\u03c0","\u039f\u03ba\u03c4","\u039d\u03bf\u03b5","\u0394\u03b5\u03ba"],WEEKDAYS:["\u039a\u03c5\u03c1\u03b9\u03b1\u03ba\u03ae","\u0394\u03b5\u03c5\u03c4\u03ad\u03c1\u03b1","\u03a4\u03c1\u03af\u03c4\u03b7","\u03a4\u03b5\u03c4\u03ac\u03c1\u03c4\u03b7","\u03a0\u03ad\u03bc\u03c0\u03c4\u03b7","\u03a0\u03b1\u03c1\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae","\u03a3\u03ac\u03b2\u03b2\u03b1\u03c4\u03bf"],
STANDALONEWEEKDAYS:["\u039a\u03c5\u03c1\u03b9\u03b1\u03ba\u03ae","\u0394\u03b5\u03c5\u03c4\u03ad\u03c1\u03b1","\u03a4\u03c1\u03af\u03c4\u03b7","\u03a4\u03b5\u03c4\u03ac\u03c1\u03c4\u03b7","\u03a0\u03ad\u03bc\u03c0\u03c4\u03b7","\u03a0\u03b1\u03c1\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae","\u03a3\u03ac\u03b2\u03b2\u03b1\u03c4\u03bf"],SHORTWEEKDAYS:["\u039a\u03c5\u03c1","\u0394\u03b5\u03c5","\u03a4\u03c1\u03b9","\u03a4\u03b5\u03c4","\u03a0\u03b5\u03bc","\u03a0\u03b1\u03c1","\u03a3\u03b1\u03b2"],STANDALONESHORTWEEKDAYS:["\u039a\u03c5\u03c1",
"\u0394\u03b5\u03c5","\u03a4\u03c1\u03b9","\u03a4\u03b5\u03c4","\u03a0\u03b5\u03bc","\u03a0\u03b1\u03c1","\u03a3\u03b1\u03b2"],NARROWWEEKDAYS:["\u039a","\u0394","\u03a4","\u03a4","\u03a0","\u03a0","\u03a3"],STANDALONENARROWWEEKDAYS:["\u039a","\u0394","\u03a4","\u03a4","\u03a0","\u03a0","\u03a3"],SHORTQUARTERS:["\u03a41","\u03a42","\u03a43","\u03a44"],QUARTERS:["1\u03bf \u03c4\u03c1\u03af\u03bc\u03b7\u03bd\u03bf","2\u03bf \u03c4\u03c1\u03af\u03bc\u03b7\u03bd\u03bf","3\u03bf \u03c4\u03c1\u03af\u03bc\u03b7\u03bd\u03bf",
"4\u03bf \u03c4\u03c1\u03af\u03bc\u03b7\u03bd\u03bf"],AMPMS:["\u03c0.\u03bc.","\u03bc.\u03bc."],DATEFORMATS:["EEEE, dd MMMM y","dd MMMM y","dd MMM y","dd/MM/yyyy"],TIMEFORMATS:["h:mm:ss a zzzz","h:mm:ss a z","h:mm:ss a","h:mm a"],AVAILABLEFORMATS:{Md:"d/M",MMMMd:"d MMMM",MMMd:"d MMM"},FIRSTDAYOFWEEK:0,WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_en={ERAS:["BC","AD"],ERANAMES:["Before Christ","Anno Domini"],NARROWMONTHS:["J","F","M","A","M","J","J","A","S","O","N","D"],STANDALONENARROWMONTHS:["J","F","M","A","M","J","J","A","S","O","N","D"],MONTHS:["January","February","March","April","May","June","July","August","September","October","November","December"],STANDALONEMONTHS:["January","February","March","April","May","June","July","August","September","October","November","December"],SHORTMONTHS:["Jan","Feb","Mar",
"Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],STANDALONESHORTMONTHS:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],WEEKDAYS:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],STANDALONEWEEKDAYS:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],SHORTWEEKDAYS:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],STANDALONESHORTWEEKDAYS:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],NARROWWEEKDAYS:["S","M","T","W","T","F","S"],STANDALONENARROWWEEKDAYS:["S",
"M","T","W","T","F","S"],SHORTQUARTERS:["Q1","Q2","Q3","Q4"],QUARTERS:["1st quarter","2nd quarter","3rd quarter","4th quarter"],AMPMS:["AM","PM"],DATEFORMATS:["EEEE, MMMM d, y","MMMM d, y","MMM d, y","M/d/yy"],TIMEFORMATS:["h:mm:ss a zzzz","h:mm:ss a z","h:mm:ss a","h:mm a"],AVAILABLEFORMATS:{Md:"M/d",MMMMd:"MMMM d",MMMd:"MMM d"},FIRSTDAYOFWEEK:6,WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:2};
goog.i18n.DateTimeSymbols_en_AU={ERAS:["BC","AD"],ERANAMES:["Before Christ","Anno Domini"],NARROWMONTHS:["J","F","M","A","M","J","J","A","S","O","N","D"],STANDALONENARROWMONTHS:["J","F","M","A","M","J","J","A","S","O","N","D"],MONTHS:["January","February","March","April","May","June","July","August","September","October","November","December"],STANDALONEMONTHS:["January","February","March","April","May","June","July","August","September","October","November","December"],SHORTMONTHS:["Jan","Feb","Mar",
"Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],STANDALONESHORTMONTHS:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],WEEKDAYS:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],STANDALONEWEEKDAYS:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],SHORTWEEKDAYS:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],STANDALONESHORTWEEKDAYS:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],NARROWWEEKDAYS:["S","M","T","W","T","F","S"],STANDALONENARROWWEEKDAYS:["S",
"M","T","W","T","F","S"],SHORTQUARTERS:["Q1","Q2","Q3","Q4"],QUARTERS:["1st quarter","2nd quarter","3rd quarter","4th quarter"],AMPMS:["AM","PM"],DATEFORMATS:["EEEE, d MMMM y","d MMMM y","dd/MM/yyyy","d/MM/yy"],TIMEFORMATS:["h:mm:ss a zzzz","h:mm:ss a z","h:mm:ss a","h:mm a"],AVAILABLEFORMATS:{Md:"M/d",MMMMd:"d MMMM",MMMd:"MMM d"},FIRSTDAYOFWEEK:0,WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_en_GB={ERAS:["BC","AD"],ERANAMES:["Before Christ","Anno Domini"],NARROWMONTHS:["J","F","M","A","M","J","J","A","S","O","N","D"],STANDALONENARROWMONTHS:["J","F","M","A","M","J","J","A","S","O","N","D"],MONTHS:["January","February","March","April","May","June","July","August","September","October","November","December"],STANDALONEMONTHS:["January","February","March","April","May","June","July","August","September","October","November","December"],SHORTMONTHS:["Jan","Feb","Mar",
"Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],STANDALONESHORTMONTHS:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],WEEKDAYS:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],STANDALONEWEEKDAYS:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],SHORTWEEKDAYS:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],STANDALONESHORTWEEKDAYS:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],NARROWWEEKDAYS:["S","M","T","W","T","F","S"],STANDALONENARROWWEEKDAYS:["S",
"M","T","W","T","F","S"],SHORTQUARTERS:["Q1","Q2","Q3","Q4"],QUARTERS:["1st quarter","2nd quarter","3rd quarter","4th quarter"],AMPMS:["AM","PM"],DATEFORMATS:["EEEE, d MMMM y","d MMMM y","d MMM y","dd/MM/yyyy"],TIMEFORMATS:["HH:mm:ss zzzz","HH:mm:ss z","HH:mm:ss","HH:mm"],AVAILABLEFORMATS:{Md:"d/M",MMMMd:"d MMMM",MMMd:"MMM d"},FIRSTDAYOFWEEK:0,WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_en_IE={ERAS:["BC","AD"],ERANAMES:["Before Christ","Anno Domini"],NARROWMONTHS:["J","F","M","A","M","J","J","A","S","O","N","D"],STANDALONENARROWMONTHS:["J","F","M","A","M","J","J","A","S","O","N","D"],MONTHS:["January","February","March","April","May","June","July","August","September","October","November","December"],STANDALONEMONTHS:["January","February","March","April","May","June","July","August","September","October","November","December"],SHORTMONTHS:["Jan","Feb","Mar",
"Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],STANDALONESHORTMONTHS:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],WEEKDAYS:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],STANDALONEWEEKDAYS:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],SHORTWEEKDAYS:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],STANDALONESHORTWEEKDAYS:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],NARROWWEEKDAYS:["S","M","T","W","T","F","S"],STANDALONENARROWWEEKDAYS:["S",
"M","T","W","T","F","S"],SHORTQUARTERS:["Q1","Q2","Q3","Q4"],QUARTERS:["1st quarter","2nd quarter","3rd quarter","4th quarter"],AMPMS:["a.m.","p.m."],DATEFORMATS:["EEEE d MMMM y","d MMMM y","d MMM y","dd/MM/yyyy"],TIMEFORMATS:["HH:mm:ss zzzz","HH:mm:ss z","HH:mm:ss","HH:mm"],AVAILABLEFORMATS:{Md:"d/M",MMMMd:"d MMMM",MMMd:"MMM d"},FIRSTDAYOFWEEK:6,WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:2};
goog.i18n.DateTimeSymbols_en_IN={ERAS:["BC","AD"],ERANAMES:["Before Christ","Anno Domini"],NARROWMONTHS:["J","F","M","A","M","J","J","A","S","O","N","D"],STANDALONENARROWMONTHS:["J","F","M","A","M","J","J","A","S","O","N","D"],MONTHS:["January","February","March","April","May","June","July","August","September","October","November","December"],STANDALONEMONTHS:["January","February","March","April","May","June","July","August","September","October","November","December"],SHORTMONTHS:["Jan","Feb","Mar",
"Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],STANDALONESHORTMONTHS:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],WEEKDAYS:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],STANDALONEWEEKDAYS:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],SHORTWEEKDAYS:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],STANDALONESHORTWEEKDAYS:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],NARROWWEEKDAYS:["S","M","T","W","T","F","S"],STANDALONENARROWWEEKDAYS:["S",
"M","T","W","T","F","S"],SHORTQUARTERS:["Q1","Q2","Q3","Q4"],QUARTERS:["1st quarter","2nd quarter","3rd quarter","4th quarter"],AMPMS:["AM","PM"],DATEFORMATS:["EEEE d MMMM y","d MMMM y","dd-MMM-y","dd/MM/yy"],TIMEFORMATS:["h:mm:ss a zzzz","h:mm:ss a z","h:mm:ss a","h:mm a"],AVAILABLEFORMATS:{Md:"M/d",MMMMd:"d MMMM",MMMd:"MMM d"},FIRSTDAYOFWEEK:6,WEEKENDRANGE:[6,6],FIRSTWEEKCUTOFFDAY:2};goog.i18n.DateTimeSymbols_en_SG=goog.i18n.DateTimeSymbols_en;goog.i18n.DateTimeSymbols_en_US=goog.i18n.DateTimeSymbols_en;
goog.i18n.DateTimeSymbols_en_ZA={ERAS:["BC","AD"],ERANAMES:["Before Christ","Anno Domini"],NARROWMONTHS:["J","F","M","A","M","J","J","A","S","O","N","D"],STANDALONENARROWMONTHS:["J","F","M","A","M","J","J","A","S","O","N","D"],MONTHS:["January","February","March","April","May","June","July","August","September","October","November","December"],STANDALONEMONTHS:["January","February","March","April","May","June","July","August","September","October","November","December"],SHORTMONTHS:["Jan","Feb","Mar",
"Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],STANDALONESHORTMONTHS:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],WEEKDAYS:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],STANDALONEWEEKDAYS:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],SHORTWEEKDAYS:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],STANDALONESHORTWEEKDAYS:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],NARROWWEEKDAYS:["S","M","T","W","T","F","S"],STANDALONENARROWWEEKDAYS:["S",
"M","T","W","T","F","S"],SHORTQUARTERS:["Q1","Q2","Q3","Q4"],QUARTERS:["1st quarter","2nd quarter","3rd quarter","4th quarter"],AMPMS:["AM","PM"],DATEFORMATS:["EEEE dd MMMM y","dd MMMM y","dd MMM y","yyyy/MM/dd"],TIMEFORMATS:["h:mm:ss a zzzz","h:mm:ss a z","h:mm:ss a","h:mm a"],AVAILABLEFORMATS:{Md:"M/d",MMMMd:"MMMM d",MMMd:"MMM d"},FIRSTDAYOFWEEK:0,WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_es={ERAS:["a.C.","d.C."],ERANAMES:["antes de Cristo","anno D\u00f3mini"],NARROWMONTHS:["E","F","M","A","M","J","J","A","S","O","N","D"],STANDALONENARROWMONTHS:["E","F","M","A","M","J","J","A","S","O","N","D"],MONTHS:["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],STANDALONEMONTHS:["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],SHORTMONTHS:["ene",
"feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],STANDALONESHORTMONTHS:["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],WEEKDAYS:["domingo","lunes","martes","mi\u00e9rcoles","jueves","viernes","s\u00e1bado"],STANDALONEWEEKDAYS:["domingo","lunes","martes","mi\u00e9rcoles","jueves","viernes","s\u00e1bado"],SHORTWEEKDAYS:["dom","lun","mar","mi\u00e9","jue","vie","s\u00e1b"],STANDALONESHORTWEEKDAYS:["dom","lun","mar","mi\u00e9","jue","vie","s\u00e1b"],NARROWWEEKDAYS:["D",
"L","M","M","J","V","S"],STANDALONENARROWWEEKDAYS:["D","L","M","M","J","V","S"],SHORTQUARTERS:["T1","T2","T3","T4"],QUARTERS:["1er trimestre","2\u00ba trimestre","3er trimestre","4\u00ba trimestre"],AMPMS:["a.m.","p.m."],DATEFORMATS:["EEEE d 'de' MMMM 'de' y","d 'de' MMMM 'de' y","dd/MM/yyyy","dd/MM/yy"],TIMEFORMATS:["HH:mm:ss zzzz","HH:mm:ss z","HH:mm:ss","HH:mm"],AVAILABLEFORMATS:{Md:"d/M",MMMMd:"d 'de' MMMM",MMMd:"d MMM"},FIRSTDAYOFWEEK:0,WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_et={ERAS:["e.m.a.","m.a.j."],ERANAMES:["enne meie aega","meie aja j\u00e4rgi"],NARROWMONTHS:["1","2","3","4","5","6","7","8","9","10","11","12"],STANDALONENARROWMONTHS:["1","2","3","4","5","6","7","8","9","10","11","12"],MONTHS:["jaanuar","veebruar","m\u00e4rts","aprill","mai","juuni","juuli","august","september","oktoober","november","detsember"],STANDALONEMONTHS:["jaanuar","veebruar","m\u00e4rts","aprill","mai","juuni","juuli","august","september","oktoober","november",
"detsember"],SHORTMONTHS:["jaan","veebr","m\u00e4rts","apr","mai","juuni","juuli","aug","sept","okt","nov","dets"],STANDALONESHORTMONTHS:["jaan","veebr","m\u00e4rts","apr","mai","juuni","juuli","aug","sept","okt","nov","dets"],WEEKDAYS:["p\u00fchap\u00e4ev","esmasp\u00e4ev","teisip\u00e4ev","kolmap\u00e4ev","neljap\u00e4ev","reede","laup\u00e4ev"],STANDALONEWEEKDAYS:["p\u00fchap\u00e4ev","esmasp\u00e4ev","teisip\u00e4ev","kolmap\u00e4ev","neljap\u00e4ev","reede","laup\u00e4ev"],SHORTWEEKDAYS:["P",
"E","T","K","N","R","L"],STANDALONESHORTWEEKDAYS:["P","E","T","K","N","R","L"],NARROWWEEKDAYS:["1","2","3","4","5","6","7"],STANDALONENARROWWEEKDAYS:["1","2","3","4","5","6","7"],SHORTQUARTERS:["K1","K2","K3","K4"],QUARTERS:["1. kvartal","2. kvartal","3. kvartal","4. kvartal"],AMPMS:["AM","PM"],DATEFORMATS:["EEEE, d, MMMM y","d MMMM y","dd.MM.yyyy","dd.MM.yy"],TIMEFORMATS:["H:mm:ss zzzz","H:mm:ss z","H:mm:ss","H:mm"],AVAILABLEFORMATS:{Md:"M-d",MMMMd:"d MMMM",MMMd:"MMM d"},FIRSTDAYOFWEEK:0,WEEKENDRANGE:[5,
6],FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_eu={ERAS:["BCE","CE"],ERANAMES:["BCE","CE"],NARROWMONTHS:["U","O","M","A","M","E","U","A","I","U","A","A"],STANDALONENARROWMONTHS:["U","O","M","A","M","E","U","A","I","U","A","A"],MONTHS:["urtarrila","otsaila","martxoa","apirila","maiatza","ekaina","uztaila","abuztua","iraila","urria","azaroa","abendua"],STANDALONEMONTHS:["urtarrila","otsaila","martxoa","apirila","maiatza","ekaina","uztaila","abuztua","iraila","urria","azaroa","abendua"],SHORTMONTHS:["urt","ots","mar","api",
"mai","eka","uzt","abu","ira","urr","aza","abe"],STANDALONESHORTMONTHS:["urt","ots","mar","api","mai","eka","uzt","abu","ira","urr","aza","abe"],WEEKDAYS:["igandea","astelehena","asteartea","asteazkena","osteguna","ostirala","larunbata"],STANDALONEWEEKDAYS:["igandea","astelehena","asteartea","asteazkena","osteguna","ostirala","larunbata"],SHORTWEEKDAYS:["ig","al","as","az","og","or","lr"],STANDALONESHORTWEEKDAYS:["ig","al","as","az","og","or","lr"],NARROWWEEKDAYS:["1","2","3","4","5","6","7"],STANDALONENARROWWEEKDAYS:["1",
"2","3","4","5","6","7"],SHORTQUARTERS:["1Hh","2Hh","3Hh","4Hh"],QUARTERS:["1. hiruhilekoa","2. hiruhilekoa","3. hiruhilekoa","4. hiruhilekoa"],AMPMS:["AM","PM"],DATEFORMATS:["EEEE, y'eko' MMMM'ren' dd'a'","y'eko' MMM'ren' dd'a'","y MMM d","yyyy-MM-dd"],TIMEFORMATS:["HH:mm:ss zzzz","HH:mm:ss z","HH:mm:ss","HH:mm"],AVAILABLEFORMATS:{Md:"M-d",MMMMd:"MMMM d",MMMd:"MMM d"},FIRSTDAYOFWEEK:0,WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_fa={ERAS:["\u0642.\u0645.","\u0645."],ERANAMES:["\u0642\u0628\u0644 \u0627\u0632 \u0645\u06cc\u0644\u0627\u062f","\u0645\u06cc\u0644\u0627\u062f\u06cc"],NARROWMONTHS:["\u0698","\u0641","\u0645","\u0622","\u0645","\u0698","\u0698","\u0627","\u0633","\u0627","\u0646","\u062f"],STANDALONENARROWMONTHS:["\u0698","\u0641","\u0645","\u0622","\u0645","\u0698","\u0698","\u0627","\u0633","\u0627","\u0646","\u062f"],MONTHS:["\u0698\u0627\u0646\u0648\u06cc\u0647\u0654","\u0641\u0648\u0631\u06cc\u0647\u0654",
"\u0645\u0627\u0631\u0633","\u0622\u0648\u0631\u06cc\u0644","\u0645\u0647\u0654","\u0698\u0648\u0626\u0646","\u0698\u0648\u0626\u06cc\u0647\u0654","\u0627\u0648\u062a","\u0633\u067e\u062a\u0627\u0645\u0628\u0631","\u0627\u06a9\u062a\u0628\u0631","\u0646\u0648\u0627\u0645\u0628\u0631","\u062f\u0633\u0627\u0645\u0628\u0631"],STANDALONEMONTHS:["\u0698\u0627\u0646\u0648\u06cc\u0647","\u0641\u0648\u0631\u06cc\u0647","\u0645\u0627\u0631\u0633","\u0622\u0648\u0631\u06cc\u0644","\u0645\u0647","\u0698\u0648\u0626\u0646",
"\u0698\u0648\u0626\u06cc\u0647","\u0627\u0648\u062a","\u0633\u067e\u062a\u0627\u0645\u0628\u0631","\u0627\u06a9\u062a\u0628\u0631","\u0646\u0648\u0627\u0645\u0628\u0631","\u062f\u0633\u0627\u0645\u0628\u0631"],SHORTMONTHS:["\u0698\u0627\u0646\u0648\u06cc\u0647\u0654","\u0641\u0648\u0631\u06cc\u0647\u0654","\u0645\u0627\u0631\u0633","\u0622\u0648\u0631\u06cc\u0644","\u0645\u0647\u0654","\u0698\u0648\u0626\u0646","\u0698\u0648\u0626\u06cc\u0647\u0654","\u0627\u0648\u062a","\u0633\u067e\u062a\u0627\u0645\u0628\u0631",
"\u0627\u06a9\u062a\u0628\u0631","\u0646\u0648\u0627\u0645\u0628\u0631","\u062f\u0633\u0627\u0645\u0628\u0631"],STANDALONESHORTMONTHS:["\u0698\u0627\u0646\u0648\u06cc\u0647","\u0641\u0648\u0631\u06cc\u0647","\u0645\u0627\u0631\u0633","\u0622\u0648\u0631\u06cc\u0644","\u0645\u0647","\u0698\u0648\u0626\u0646","\u0698\u0648\u0626\u06cc\u0647","\u0627\u0648\u062a","\u0633\u067e\u062a\u0627\u0645\u0628\u0631","\u0627\u06a9\u062a\u0628\u0631","\u0646\u0648\u0627\u0645\u0628\u0631","\u062f\u0633\u0627\u0645\u0628\u0631"],
WEEKDAYS:["\u06cc\u06a9\u0634\u0646\u0628\u0647","\u062f\u0648\u0634\u0646\u0628\u0647","\u0633\u0647\u0634\u0646\u0628\u0647","\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647","\u067e\u0646\u062c\u0634\u0646\u0628\u0647","\u062c\u0645\u0639\u0647","\u0634\u0646\u0628\u0647"],STANDALONEWEEKDAYS:["\u06cc\u06a9\u0634\u0646\u0628\u0647","\u062f\u0648\u0634\u0646\u0628\u0647","\u0633\u0647\u0634\u0646\u0628\u0647","\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647","\u067e\u0646\u062c\u0634\u0646\u0628\u0647",
"\u062c\u0645\u0639\u0647","\u0634\u0646\u0628\u0647"],SHORTWEEKDAYS:["\u06cc\u06a9\u0634\u0646\u0628\u0647","\u062f\u0648\u0634\u0646\u0628\u0647","\u0633\u0647\u0634\u0646\u0628\u0647","\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647","\u067e\u0646\u062c\u0634\u0646\u0628\u0647","\u062c\u0645\u0639\u0647","\u0634\u0646\u0628\u0647"],STANDALONESHORTWEEKDAYS:["\u06cc\u06a9\u0634\u0646\u0628\u0647","\u062f\u0648\u0634\u0646\u0628\u0647","\u0633\u0647\u0634\u0646\u0628\u0647","\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647",
"\u067e\u0646\u062c\u0634\u0646\u0628\u0647","\u062c\u0645\u0639\u0647","\u0634\u0646\u0628\u0647"],NARROWWEEKDAYS:["\u06cc","\u062f","\u0633","\u0686","\u067e","\u062c","\u0634"],STANDALONENARROWWEEKDAYS:["\u06cc","\u062f","\u0633","\u0686","\u067e","\u062c","\u0634"],SHORTQUARTERS:["\u0633\u0645\u06f1","\u0633\u0645\u06f2","\u0633\u0645\u06f3","\u0633\u0645\u06f4"],QUARTERS:["\u0633\u0647\u0645\u0627\u0647\u0647\u0654 \u0627\u0648\u0644","\u0633\u0647\u0645\u0627\u0647\u0647\u0654 \u062f\u0648\u0645",
"\u0633\u0647\u0645\u0627\u0647\u0647\u0654 \u0633\u0648\u0645","\u0633\u0647\u0645\u0627\u0647\u0647\u0654 \u0686\u0647\u0627\u0631\u0645"],AMPMS:["\u0642\u0628\u0644 \u0627\u0632 \u0638\u0647\u0631","\u0628\u0639\u062f \u0627\u0632 \u0638\u0647\u0631"],DATEFORMATS:["EEEE d MMMM y","d MMMM y","yyyy/M/d","yy/M/d"],TIMEFORMATS:["H:mm:ss (zzzz)","H:mm:ss (z)","H:mm:ss","H:mm"],AVAILABLEFORMATS:{Md:"M/d",MMMMd:"d LLLL",MMMd:"d LLL"},FIRSTDAYOFWEEK:5,WEEKENDRANGE:[3,4],FIRSTWEEKCUTOFFDAY:1};
goog.i18n.DateTimeSymbols_fi={ERAS:["eKr.","jKr."],ERANAMES:["ennen Kristuksen syntym\u00e4\u00e4","j\u00e4lkeen Kristuksen syntym\u00e4n"],NARROWMONTHS:["T","H","M","H","T","K","H","E","S","L","M","J"],STANDALONENARROWMONTHS:["T","H","M","H","T","K","H","E","S","L","M","J"],MONTHS:["tammikuuta","helmikuuta","maaliskuuta","huhtikuuta","toukokuuta","kes\u00e4kuuta","hein\u00e4kuuta","elokuuta","syyskuuta","lokakuuta","marraskuuta","joulukuuta"],STANDALONEMONTHS:["tammikuu","helmikuu","maaliskuu","huhtikuu",
"toukokuu","kes\u00e4kuu","hein\u00e4kuu","elokuu","syyskuu","lokakuu","marraskuu","joulukuu"],SHORTMONTHS:["tammikuuta","helmikuuta","maaliskuuta","huhtikuuta","toukokuuta","kes\u00e4kuuta","hein\u00e4kuuta","elokuuta","syyskuuta","lokakuuta","marraskuuta","joulukuuta"],STANDALONESHORTMONTHS:["tammi","helmi","maalis","huhti","touko","kes\u00e4","hein\u00e4","elo","syys","loka","marras","joulu"],WEEKDAYS:["sunnuntaina","maanantaina","tiistaina","keskiviikkona","torstaina","perjantaina","lauantaina"],
STANDALONEWEEKDAYS:["sunnuntai","maanantai","tiistai","keskiviikko","torstai","perjantai","lauantai"],SHORTWEEKDAYS:["su","ma","ti","ke","to","pe","la"],STANDALONESHORTWEEKDAYS:["su","ma","ti","ke","to","pe","la"],NARROWWEEKDAYS:["S","M","T","K","T","P","L"],STANDALONENARROWWEEKDAYS:["S","M","T","K","T","P","L"],SHORTQUARTERS:["1. nelj.","2. nelj.","3. nelj.","4. nelj."],QUARTERS:["1. nelj\u00e4nnes","2. nelj\u00e4nnes","3. nelj\u00e4nnes","4. nelj\u00e4nnes"],AMPMS:["ap.","ip."],DATEFORMATS:["EEEE d. MMMM y",
"d. MMMM y","d.M.yyyy","d.M.yyyy"],TIMEFORMATS:["H.mm.ss zzzz","H.mm.ss z","H.mm.ss","H.mm"],AVAILABLEFORMATS:{Md:"d.M.",MMMMd:"d. MMMM",MMMd:"d. MMM"},FIRSTDAYOFWEEK:0,WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_fil={ERAS:["BCE","CE"],ERANAMES:["BCE","CE"],NARROWMONTHS:["E","P","M","A","M","H","H","A","S","O","N","D"],STANDALONENARROWMONTHS:["E","P","M","A","M","H","H","A","S","O","N","D"],MONTHS:["Enero","Pebrero","Marso","Abril","Mayo","Hunyo","Hulyo","Agosto","Setyembre","Oktubre","Nobyembre","Disyembre"],STANDALONEMONTHS:["Enero","Pebrero","Marso","Abril","Mayo","Hunyo","Hulyo","Agosto","Setyembre","Oktubre","Nobyembre","Disyembre"],SHORTMONTHS:["Ene","Peb","Mar","Abr","May",
"Hun","Hul","Ago","Set","Okt","Nob","Dis"],STANDALONESHORTMONTHS:["Ene","Peb","Mar","Abr","May","Hun","Hul","Ago","Set","Okt","Nob","Dis"],WEEKDAYS:["Linggo","Lunes","Martes","Miyerkules","Huwebes","Biyernes","Sabado"],STANDALONEWEEKDAYS:["Linggo","Lunes","Martes","Miyerkules","Huwebes","Biyernes","Sabado"],SHORTWEEKDAYS:["Lin","Lun","Mar","Mye","Huw","Bye","Sab"],STANDALONESHORTWEEKDAYS:["Lin","Lun","Mar","Miy","Huw","Biy","Sab"],NARROWWEEKDAYS:["L","L","M","M","H","B","S"],STANDALONENARROWWEEKDAYS:["L",
"L","M","M","H","B","S"],SHORTQUARTERS:["Q1","Q2","Q3","Q4"],QUARTERS:["Q1","Q2","Q3","Q4"],AMPMS:["AM","PM"],DATEFORMATS:["EEEE, MMMM dd y","MMMM d, y","MMM d, y","M/d/yy"],TIMEFORMATS:["HH:mm:ss zzzz","HH:mm:ss z","HH:mm:ss","HH:mm"],AVAILABLEFORMATS:{Md:"M-d",MMMMd:"MMMM d",MMMd:"MMM d"},FIRSTDAYOFWEEK:6,WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:2};
goog.i18n.DateTimeSymbols_fr={ERAS:["av. J.-C.","ap. J.-C."],ERANAMES:["avant J\u00e9sus-Christ","apr\u00e8s J\u00e9sus-Christ"],NARROWMONTHS:["J","F","M","A","M","J","J","A","S","O","N","D"],STANDALONENARROWMONTHS:["J","F","M","A","M","J","J","A","S","O","N","D"],MONTHS:["janvier","f\u00e9vrier","mars","avril","mai","juin","juillet","ao\u00fbt","septembre","octobre","novembre","d\u00e9cembre"],STANDALONEMONTHS:["janvier","f\u00e9vrier","mars","avril","mai","juin","juillet","ao\u00fbt","septembre",
"octobre","novembre","d\u00e9cembre"],SHORTMONTHS:["janv.","f\u00e9vr.","mars","avr.","mai","juin","juil.","ao\u00fbt","sept.","oct.","nov.","d\u00e9c."],STANDALONESHORTMONTHS:["janv.","f\u00e9vr.","mars","avr.","mai","juin","juil.","ao\u00fbt","sept.","oct.","nov.","d\u00e9c."],WEEKDAYS:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],STANDALONEWEEKDAYS:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],SHORTWEEKDAYS:["dim.","lun.","mar.","mer.","jeu.","ven.",
"sam."],STANDALONESHORTWEEKDAYS:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],NARROWWEEKDAYS:["D","L","M","M","J","V","S"],STANDALONENARROWWEEKDAYS:["D","L","M","M","J","V","S"],SHORTQUARTERS:["T1","T2","T3","T4"],QUARTERS:["1er trimestre","2e trimestre","3e trimestre","4e trimestre"],AMPMS:["AM","PM"],DATEFORMATS:["EEEE d MMMM y","d MMMM y","d MMM y","dd/MM/yy"],TIMEFORMATS:["HH:mm:ss zzzz","HH:mm:ss z","HH:mm:ss","HH:mm"],AVAILABLEFORMATS:{Md:"d/M",MMMMd:"d MMMM",MMMd:"d MMM"},FIRSTDAYOFWEEK:0,
WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_fr_CA={ERAS:["av. J.-C.","ap. J.-C."],ERANAMES:["avant J\u00e9sus-Christ","apr\u00e8s J\u00e9sus-Christ"],NARROWMONTHS:["J","F","M","A","M","J","J","A","S","O","N","D"],STANDALONENARROWMONTHS:["J","F","M","A","M","J","J","A","S","O","N","D"],MONTHS:["janvier","f\u00e9vrier","mars","avril","mai","juin","juillet","ao\u00fbt","septembre","octobre","novembre","d\u00e9cembre"],STANDALONEMONTHS:["janvier","f\u00e9vrier","mars","avril","mai","juin","juillet","ao\u00fbt","septembre",
"octobre","novembre","d\u00e9cembre"],SHORTMONTHS:["janv.","f\u00e9vr.","mars","avr.","mai","juin","juil.","ao\u00fbt","sept.","oct.","nov.","d\u00e9c."],STANDALONESHORTMONTHS:["janv.","f\u00e9vr.","mars","avr.","mai","juin","juil.","ao\u00fbt","sept.","oct.","nov.","d\u00e9c."],WEEKDAYS:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],STANDALONEWEEKDAYS:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],SHORTWEEKDAYS:["dim.","lun.","mar.","mer.","jeu.","ven.",
"sam."],STANDALONESHORTWEEKDAYS:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],NARROWWEEKDAYS:["D","L","M","M","J","V","S"],STANDALONENARROWWEEKDAYS:["D","L","M","M","J","V","S"],SHORTQUARTERS:["T1","T2","T3","T4"],QUARTERS:["1er trimestre","2e trimestre","3e trimestre","4e trimestre"],AMPMS:["AM","PM"],DATEFORMATS:["EEEE d MMMM y","d MMMM y","yyyy-MM-dd","yy-MM-dd"],TIMEFORMATS:["HH 'h' mm 'min' ss 's' zzzz","HH:mm:ss z","HH:mm:ss","HH:mm"],AVAILABLEFORMATS:{Md:"M-d",MMMMd:"d MMMM",MMMd:"d MMM"},
FIRSTDAYOFWEEK:6,WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:2};
goog.i18n.DateTimeSymbols_gl={ERAS:["a.C.","d.C."],ERANAMES:["antes de Cristo","despois de Cristo"],NARROWMONTHS:["X","F","M","A","M","X","X","A","S","O","N","D"],STANDALONENARROWMONTHS:["X","F","M","A","M","X","X","A","S","O","N","D"],MONTHS:["Xaneiro","Febreiro","Marzo","Abril","Maio","Xu\u00f1o","Xullo","Agosto","Setembro","Outubro","Novembro","Decembro"],STANDALONEMONTHS:["Xaneiro","Febreiro","Marzo","Abril","Maio","Xu\u00f1o","Xullo","Agosto","Setembro","Outubro","Novembro","Decembro"],SHORTMONTHS:["Xan",
"Feb","Mar","Abr","Mai","Xu\u00f1","Xul","Ago","Set","Out","Nov","Dec"],STANDALONESHORTMONTHS:["Xan","Feb","Mar","Abr","Mai","Xu\u00f1","Xul","Ago","Set","Out","Nov","Dec"],WEEKDAYS:["Domingo","Luns","Martes","M\u00e9rcores","Xoves","Venres","S\u00e1bado"],STANDALONEWEEKDAYS:["Domingo","Luns","Martes","M\u00e9rcores","Xoves","Venres","S\u00e1bado"],SHORTWEEKDAYS:["Dom","Lun","Mar","M\u00e9r","Xov","Ven","S\u00e1b"],STANDALONESHORTWEEKDAYS:["Dom","Lun","Mar","M\u00e9r","Xov","Ven","S\u00e1b"],NARROWWEEKDAYS:["D",
"L","M","M","X","V","S"],STANDALONENARROWWEEKDAYS:["D","L","M","M","X","V","S"],SHORTQUARTERS:["T1","T2","T3","T4"],QUARTERS:["1o trimestre","2o trimestre","3o trimestre","4o trimestre"],AMPMS:["AM","PM"],DATEFORMATS:["EEEE dd MMMM y","dd MMMM y","d MMM, y","dd/MM/yy"],TIMEFORMATS:["HH:mm:ss zzzz","HH:mm:ss z","HH:mm:ss","HH:mm"],AVAILABLEFORMATS:{Md:"d-M",MMMMd:"d MMMM",MMMd:"d MMM"},FIRSTDAYOFWEEK:0,WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_gsw={ERAS:["v. Chr.","n. Chr."],ERANAMES:["v. Chr.","n. Chr."],NARROWMONTHS:["J","F","M","A","M","J","J","A","S","O","N","D"],STANDALONENARROWMONTHS:["J","F","M","A","M","J","J","A","S","O","N","D"],MONTHS:["Januar","Februar","M\u00e4rz","April","Mai","Juni","Juli","Auguscht","Sept\u00e4mber","Oktoober","Nov\u00e4mber","Dez\u00e4mber"],STANDALONEMONTHS:["Januar","Februar","M\u00e4rz","April","Mai","Juni","Juli","Auguscht","Sept\u00e4mber","Oktoober","Nov\u00e4mber","Dez\u00e4mber"],
SHORTMONTHS:["Jan","Feb","M\u00e4r","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],STANDALONESHORTMONTHS:["Jan","Feb","M\u00e4r","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],WEEKDAYS:["Sunntig","M\u00e4\u00e4ntig","Ziischtig","Mittwuch","Dunschtig","Friitig","Samschtig"],STANDALONEWEEKDAYS:["Sunntig","M\u00e4\u00e4ntig","Ziischtig","Mittwuch","Dunschtig","Friitig","Samschtig"],SHORTWEEKDAYS:["Su.","M\u00e4.","Zi.","Mi.","Du.","Fr.","Sa."],STANDALONESHORTWEEKDAYS:["Su.","M\u00e4.",
"Zi.","Mi.","Du.","Fr.","Sa."],NARROWWEEKDAYS:["S","M","D","M","D","F","S"],STANDALONENARROWWEEKDAYS:["S","M","D","M","D","F","S"],SHORTQUARTERS:["Q1","Q2","Q3","Q4"],QUARTERS:["1. Quartal","2. Quartal","3. Quartal","4. Quartal"],AMPMS:["vorm.","nam."],DATEFORMATS:["EEEE, d. MMMM y","d. MMMM y","dd.MM.yyyy","dd.MM.yy"],TIMEFORMATS:["HH:mm:ss zzzz","HH:mm:ss z","HH:mm:ss","HH:mm"],AVAILABLEFORMATS:{Md:"d.M.",MMMMd:"d. MMMM",MMMd:"d. MMM"},FIRSTDAYOFWEEK:0,WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_gu={ERAS:["BCE","CE"],ERANAMES:["\u0a88\u0ab8\u0ab5\u0ac0\u0ab8\u0aa8 \u0aaa\u0ac2\u0ab0\u0acd\u0ab5\u0ac7","\u0a87\u0ab8\u0ab5\u0ac0\u0ab8\u0aa8"],NARROWMONTHS:["\u0a9c\u0abe","\u0aab\u0ac7","\u0aae\u0abe","\u0a8f","\u0aae\u0ac7","\u0a9c\u0ac2","\u0a9c\u0ac1","\u0a91","\u0ab8","\u0a91","\u0aa8","\u0aa1\u0abf"],STANDALONENARROWMONTHS:["\u0a9c\u0abe","\u0aab\u0ac7","\u0aae\u0abe","\u0a8f","\u0aae\u0ac7","\u0a9c\u0ac2","\u0a9c\u0ac1","\u0a91","\u0ab8","\u0a91","\u0aa8","\u0aa1\u0abf"],
MONTHS:["\u0a9c\u0abe\u0aa8\u0acd\u0aaf\u0ac1\u0a86\u0ab0\u0ac0","\u0aab\u0ac7\u0aac\u0acd\u0ab0\u0ac1\u0a86\u0ab0\u0ac0","\u0aae\u0abe\u0ab0\u0acd\u0a9a","\u0a8f\u0aaa\u0acd\u0ab0\u0abf\u0ab2","\u0aae\u0ac7","\u0a9c\u0ac2\u0aa8","\u0a9c\u0ac1\u0ab2\u0abe\u0a88","\u0a91\u0a97\u0ab8\u0acd\u0a9f","\u0ab8\u0aaa\u0acd\u0a9f\u0ac7\u0aae\u0acd\u0aac\u0ab0","\u0a91\u0a95\u0acd\u0a9f\u0acd\u0aac\u0ab0","\u0aa8\u0ab5\u0ac7\u0aae\u0acd\u0aac\u0ab0","\u0aa1\u0abf\u0ab8\u0ac7\u0aae\u0acd\u0aac\u0ab0"],STANDALONEMONTHS:["\u0a9c\u0abe\u0aa8\u0acd\u0aaf\u0ac1\u0a86\u0ab0\u0ac0",
"\u0aab\u0ac7\u0aac\u0acd\u0ab0\u0ac1\u0a86\u0ab0\u0ac0","\u0aae\u0abe\u0ab0\u0acd\u0a9a","\u0a8f\u0aaa\u0acd\u0ab0\u0abf\u0ab2","\u0aae\u0ac7","\u0a9c\u0ac2\u0aa8","\u0a9c\u0ac1\u0ab2\u0abe\u0a88","\u0a91\u0a97\u0ab8\u0acd\u0a9f","\u0ab8\u0aaa\u0acd\u0a9f\u0ac7\u0aae\u0acd\u0aac\u0ab0","\u0a91\u0a95\u0acd\u0a9f\u0acd\u0aac\u0ab0","\u0aa8\u0ab5\u0ac7\u0aae\u0acd\u0aac\u0ab0","\u0aa1\u0abf\u0ab8\u0ac7\u0aae\u0acd\u0aac\u0ab0"],SHORTMONTHS:["\u0a9c\u0abe\u0aa8\u0acd\u0aaf\u0ac1","\u0aab\u0ac7\u0aac\u0acd\u0ab0\u0ac1",
"\u0aae\u0abe\u0ab0\u0acd\u0a9a","\u0a8f\u0aaa\u0acd\u0ab0\u0abf\u0ab2","\u0aae\u0ac7","\u0a9c\u0ac2\u0aa8","\u0a9c\u0ac1\u0ab2\u0abe\u0a88","\u0a91\u0a97\u0ab8\u0acd\u0a9f","\u0ab8\u0aaa\u0acd\u0a9f\u0ac7","\u0a91\u0a95\u0acd\u0a9f\u0acb","\u0aa8\u0ab5\u0ac7","\u0aa1\u0abf\u0ab8\u0ac7"],STANDALONESHORTMONTHS:["\u0a9c\u0abe\u0aa8\u0acd\u0aaf\u0ac1","\u0aab\u0ac7\u0aac\u0acd\u0ab0\u0ac1","\u0aae\u0abe\u0ab0\u0acd\u0a9a","\u0a8f\u0aaa\u0acd\u0ab0\u0abf\u0ab2","\u0aae\u0ac7","\u0a9c\u0ac2\u0aa8","\u0a9c\u0ac1\u0ab2\u0abe\u0a88",
"\u0a91\u0a97\u0ab8\u0acd\u0a9f","\u0ab8\u0aaa\u0acd\u0a9f\u0ac7","\u0a91\u0a95\u0acd\u0a9f\u0acb","\u0aa8\u0ab5\u0ac7","\u0aa1\u0abf\u0ab8\u0ac7"],WEEKDAYS:["\u0ab0\u0ab5\u0abf\u0ab5\u0abe\u0ab0","\u0ab8\u0acb\u0aae\u0ab5\u0abe\u0ab0","\u0aae\u0a82\u0a97\u0ab3\u0ab5\u0abe\u0ab0","\u0aac\u0ac1\u0aa7\u0ab5\u0abe\u0ab0","\u0a97\u0ac1\u0ab0\u0ac1\u0ab5\u0abe\u0ab0","\u0ab6\u0ac1\u0a95\u0acd\u0ab0\u0ab5\u0abe\u0ab0","\u0ab6\u0aa8\u0abf\u0ab5\u0abe\u0ab0"],STANDALONEWEEKDAYS:["\u0ab0\u0ab5\u0abf\u0ab5\u0abe\u0ab0",
"\u0ab8\u0acb\u0aae\u0ab5\u0abe\u0ab0","\u0aae\u0a82\u0a97\u0ab3\u0ab5\u0abe\u0ab0","\u0aac\u0ac1\u0aa7\u0ab5\u0abe\u0ab0","\u0a97\u0ac1\u0ab0\u0ac1\u0ab5\u0abe\u0ab0","\u0ab6\u0ac1\u0a95\u0acd\u0ab0\u0ab5\u0abe\u0ab0","\u0ab6\u0aa8\u0abf\u0ab5\u0abe\u0ab0"],SHORTWEEKDAYS:["\u0ab0\u0ab5\u0abf","\u0ab8\u0acb\u0aae","\u0aae\u0a82\u0a97\u0ab3","\u0aac\u0ac1\u0aa7","\u0a97\u0ac1\u0ab0\u0ac1","\u0ab6\u0ac1\u0a95\u0acd\u0ab0","\u0ab6\u0aa8\u0abf"],STANDALONESHORTWEEKDAYS:["\u0ab0\u0ab5\u0abf","\u0ab8\u0acb\u0aae",
"\u0aae\u0a82\u0a97\u0ab3","\u0aac\u0ac1\u0aa7","\u0a97\u0ac1\u0ab0\u0ac1","\u0ab6\u0ac1\u0a95\u0acd\u0ab0","\u0ab6\u0aa8\u0abf"],NARROWWEEKDAYS:["\u0ab0","\u0ab8\u0acb","\u0aae\u0a82","\u0aac\u0ac1","\u0a97\u0ac1","\u0ab6\u0ac1","\u0ab6"],STANDALONENARROWWEEKDAYS:["\u0ab0","\u0ab8\u0acb","\u0aae\u0a82","\u0aac\u0ac1","\u0a97\u0ac1","\u0ab6\u0ac1","\u0ab6"],SHORTQUARTERS:["\u0aa4\u0acd\u0ab0\u0abf\u0aae\u0abe\u0ab8\u0abf\u0a95 \u0ae7","\u0aa4\u0acd\u0ab0\u0abf\u0aae\u0abe\u0ab8\u0abf\u0a95 \u0ae8",
"\u0aa4\u0acd\u0ab0\u0abf\u0aae\u0abe\u0ab8\u0abf\u0a95 \u0ae9","\u0aa4\u0acd\u0ab0\u0abf\u0aae\u0abe\u0ab8\u0abf\u0a95 \u0aea"],QUARTERS:["\u0aaa\u0ab9\u0ab2\u0ac0 \u0aa4\u0acd\u0ab0\u0abf\u0aae\u0abe\u0ab8\u0abf\u0a95","\u0aac\u0ac0\u0a9c\u0ac0 \u0aa4\u0acd\u0ab0\u0abf\u0aae\u0abe\u0ab8\u0abf\u0a95","\u0aa4\u0acd\u0ab0\u0ac0\u0a9c\u0ac0 \u0aa4\u0acd\u0ab0\u0abf\u0aae\u0abe\u0ab8\u0abf\u0a95","\u0a9a\u0acc\u0aa5\u0ac0 \u0aa4\u0acd\u0ab0\u0abf\u0aae\u0abe\u0ab8\u0abf\u0a95"],AMPMS:["am","pm"],DATEFORMATS:["EEEE, d MMMM, y",
"d MMMM, y","d MMM, y","d-MM-yy"],TIMEFORMATS:["hh:mm:ss a zzzz","hh:mm:ss a z","hh:mm:ss a","hh:mm a"],AVAILABLEFORMATS:{Md:"M-d",MMMMd:"d MMMM",MMMd:"MMM d"},FIRSTDAYOFWEEK:6,WEEKENDRANGE:[6,6],FIRSTWEEKCUTOFFDAY:2};
goog.i18n.DateTimeSymbols_he={ERAS:["\u05dc\u05e4\u05e0\u05d4\u05f4\u05e1","\u05dc\u05e1\u05d4\u05f4\u05e0"],ERANAMES:["\u05dc\u05e4\u05e0\u05d9 \u05d4\u05e1\u05e4\u05d9\u05e8\u05d4","\u05dc\u05e1\u05e4\u05d9\u05e8\u05d4"],NARROWMONTHS:["1","2","3","4","5","6","7","8","9","10","11","12"],STANDALONENARROWMONTHS:["1","2","3","4","5","6","7","8","9","10","11","12"],MONTHS:["\u05d9\u05e0\u05d5\u05d0\u05e8","\u05e4\u05d1\u05e8\u05d5\u05d0\u05e8","\u05de\u05e8\u05e1","\u05d0\u05e4\u05e8\u05d9\u05dc","\u05de\u05d0\u05d9",
"\u05d9\u05d5\u05e0\u05d9","\u05d9\u05d5\u05dc\u05d9","\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8","\u05e1\u05e4\u05d8\u05de\u05d1\u05e8","\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8","\u05e0\u05d5\u05d1\u05de\u05d1\u05e8","\u05d3\u05e6\u05de\u05d1\u05e8"],STANDALONEMONTHS:["\u05d9\u05e0\u05d5\u05d0\u05e8","\u05e4\u05d1\u05e8\u05d5\u05d0\u05e8","\u05de\u05e8\u05e1","\u05d0\u05e4\u05e8\u05d9\u05dc","\u05de\u05d0\u05d9","\u05d9\u05d5\u05e0\u05d9","\u05d9\u05d5\u05dc\u05d9","\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8",
"\u05e1\u05e4\u05d8\u05de\u05d1\u05e8","\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8","\u05e0\u05d5\u05d1\u05de\u05d1\u05e8","\u05d3\u05e6\u05de\u05d1\u05e8"],SHORTMONTHS:["\u05d9\u05e0\u05d5","\u05e4\u05d1\u05e8","\u05de\u05e8\u05e1","\u05d0\u05e4\u05e8","\u05de\u05d0\u05d9","\u05d9\u05d5\u05e0","\u05d9\u05d5\u05dc","\u05d0\u05d5\u05d2","\u05e1\u05e4\u05d8","\u05d0\u05d5\u05e7","\u05e0\u05d5\u05d1","\u05d3\u05e6\u05de"],STANDALONESHORTMONTHS:["\u05d9\u05e0\u05d5","\u05e4\u05d1\u05e8","\u05de\u05e8\u05e1",
"\u05d0\u05e4\u05e8","\u05de\u05d0\u05d9","\u05d9\u05d5\u05e0","\u05d9\u05d5\u05dc","\u05d0\u05d5\u05d2","\u05e1\u05e4\u05d8","\u05d0\u05d5\u05e7","\u05e0\u05d5\u05d1","\u05d3\u05e6\u05de"],WEEKDAYS:["\u05d9\u05d5\u05dd \u05e8\u05d0\u05e9\u05d5\u05df","\u05d9\u05d5\u05dd \u05e9\u05e0\u05d9","\u05d9\u05d5\u05dd \u05e9\u05dc\u05d9\u05e9\u05d9","\u05d9\u05d5\u05dd \u05e8\u05d1\u05d9\u05e2\u05d9","\u05d9\u05d5\u05dd \u05d7\u05de\u05d9\u05e9\u05d9","\u05d9\u05d5\u05dd \u05e9\u05d9\u05e9\u05d9","\u05d9\u05d5\u05dd \u05e9\u05d1\u05ea"],
STANDALONEWEEKDAYS:["\u05d9\u05d5\u05dd \u05e8\u05d0\u05e9\u05d5\u05df","\u05d9\u05d5\u05dd \u05e9\u05e0\u05d9","\u05d9\u05d5\u05dd \u05e9\u05dc\u05d9\u05e9\u05d9","\u05d9\u05d5\u05dd \u05e8\u05d1\u05d9\u05e2\u05d9","\u05d9\u05d5\u05dd \u05d7\u05de\u05d9\u05e9\u05d9","\u05d9\u05d5\u05dd \u05e9\u05d9\u05e9\u05d9","\u05d9\u05d5\u05dd \u05e9\u05d1\u05ea"],SHORTWEEKDAYS:["\u05d9\u05d5\u05dd \u05d0'","\u05d9\u05d5\u05dd \u05d1'","\u05d9\u05d5\u05dd \u05d2'","\u05d9\u05d5\u05dd \u05d3'","\u05d9\u05d5\u05dd \u05d4'",
"\u05d9\u05d5\u05dd \u05d5'","\u05e9\u05d1\u05ea"],STANDALONESHORTWEEKDAYS:["\u05d9\u05d5\u05dd \u05d0'","\u05d9\u05d5\u05dd \u05d1'","\u05d9\u05d5\u05dd \u05d2'","\u05d9\u05d5\u05dd \u05d3'","\u05d9\u05d5\u05dd \u05d4'","\u05d9\u05d5\u05dd \u05d5'","\u05e9\u05d1\u05ea"],NARROWWEEKDAYS:["\u05d0","\u05d1","\u05d2","\u05d3","\u05d4","\u05d5","\u05e9"],STANDALONENARROWWEEKDAYS:["\u05d0","\u05d1","\u05d2","\u05d3","\u05d4","\u05d5","\u05e9"],SHORTQUARTERS:["\u05e8\u05d1\u05e2\u05d5\u05df 1","\u05e8\u05d1\u05e2\u05d5\u05df 2",
"\u05e8\u05d1\u05e2\u05d5\u05df 3","\u05e8\u05d1\u05e2\u05d5\u05df 4"],QUARTERS:["\u05e8\u05d1\u05e2\u05d5\u05df 1","\u05e8\u05d1\u05e2\u05d5\u05df 2","\u05e8\u05d1\u05e2\u05d5\u05df 3","\u05e8\u05d1\u05e2\u05d5\u05df 4"],AMPMS:['\u05dc\u05e4\u05e0\u05d4"\u05e6','\u05d0\u05d7\u05d4"\u05e6'],DATEFORMATS:["EEEE, d \u05d1MMMM y","d \u05d1MMMM y","dd/MM/yyyy","dd/MM/yy"],TIMEFORMATS:["HH:mm:ss zzzz","HH:mm:ss z","HH:mm:ss","HH:mm"],AVAILABLEFORMATS:{Md:"d/M",MMMMd:"d \u05d1MMMM",MMMd:"MMM d"},FIRSTDAYOFWEEK:6,
WEEKENDRANGE:[4,5],FIRSTWEEKCUTOFFDAY:2};
goog.i18n.DateTimeSymbols_hi={ERAS:["\u0908\u0938\u093e\u092a\u0942\u0930\u094d\u0935","\u0938\u0928"],ERANAMES:["\u0908\u0938\u093e\u092a\u0942\u0930\u094d\u0935","\u0938\u0928"],NARROWMONTHS:["\u091c","\u092b\u093c","\u092e\u093e","\u0905","\u092e","\u091c\u0942","\u091c\u0941","\u0905","\u0938\u093f","\u0905","\u0928","\u0926\u093f"],STANDALONENARROWMONTHS:["\u091c","\u092b\u093c","\u092e\u093e","\u0905","\u092e","\u091c\u0942","\u091c\u0941","\u0905","\u0938\u093f","\u0905","\u0928","\u0926\u093f"],
MONTHS:["\u091c\u0928\u0935\u0930\u0940","\u092b\u0930\u0935\u0930\u0940","\u092e\u093e\u0930\u094d\u091a","\u0905\u092a\u094d\u0930\u0948\u0932","\u092e\u0908","\u091c\u0942\u0928","\u091c\u0941\u0932\u093e\u0908","\u0905\u0917\u0938\u094d\u0924","\u0938\u093f\u0924\u092e\u094d\u092c\u0930","\u0905\u0915\u094d\u0924\u0942\u092c\u0930","\u0928\u0935\u092e\u094d\u092c\u0930","\u0926\u093f\u0938\u092e\u094d\u092c\u0930"],STANDALONEMONTHS:["\u091c\u0928\u0935\u0930\u0940","\u092b\u0930\u0935\u0930\u0940",
"\u092e\u093e\u0930\u094d\u091a","\u0905\u092a\u094d\u0930\u0948\u0932","\u092e\u0908","\u091c\u0942\u0928","\u091c\u0941\u0932\u093e\u0908","\u0905\u0917\u0938\u094d\u0924","\u0938\u093f\u0924\u092e\u094d\u092c\u0930","\u0905\u0915\u094d\u0924\u0942\u092c\u0930","\u0928\u0935\u092e\u094d\u092c\u0930","\u0926\u093f\u0938\u092e\u094d\u092c\u0930"],SHORTMONTHS:["\u091c\u0928\u0935\u0930\u0940","\u092b\u0930\u0935\u0930\u0940","\u092e\u093e\u0930\u094d\u091a","\u0905\u092a\u094d\u0930\u0948\u0932","\u092e\u0908",
"\u091c\u0942\u0928","\u091c\u0941\u0932\u093e\u0908","\u0905\u0917\u0938\u094d\u0924","\u0938\u093f\u0924\u092e\u094d\u092c\u0930","\u0905\u0915\u094d\u0924\u0942\u092c\u0930","\u0928\u0935\u092e\u094d\u092c\u0930","\u0926\u093f\u0938\u092e\u094d\u092c\u0930"],STANDALONESHORTMONTHS:["\u091c\u0928\u0935\u0930\u0940","\u092b\u0930\u0935\u0930\u0940","\u092e\u093e\u0930\u094d\u091a","\u0905\u092a\u094d\u0930\u0948\u0932","\u092e\u0908","\u091c\u0942\u0928","\u091c\u0941\u0932\u093e\u0908","\u0905\u0917\u0938\u094d\u0924",
"\u0938\u093f\u0924\u092e\u094d\u092c\u0930","\u0905\u0915\u094d\u0924\u0942\u092c\u0930","\u0928\u0935\u092e\u094d\u092c\u0930","\u0926\u093f\u0938\u092e\u094d\u092c\u0930"],WEEKDAYS:["\u0930\u0935\u093f\u0935\u093e\u0930","\u0938\u094b\u092e\u0935\u093e\u0930","\u092e\u0902\u0917\u0932\u0935\u093e\u0930","\u092c\u0941\u0927\u0935\u093e\u0930","\u0917\u0941\u0930\u0941\u0935\u093e\u0930","\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930","\u0936\u0928\u093f\u0935\u093e\u0930"],STANDALONEWEEKDAYS:["\u0930\u0935\u093f\u0935\u093e\u0930",
"\u0938\u094b\u092e\u0935\u093e\u0930","\u092e\u0902\u0917\u0932\u0935\u093e\u0930","\u092c\u0941\u0927\u0935\u093e\u0930","\u0917\u0941\u0930\u0941\u0935\u093e\u0930","\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930","\u0936\u0928\u093f\u0935\u093e\u0930"],SHORTWEEKDAYS:["\u0930\u0935\u093f","\u0938\u094b\u092e","\u092e\u0902\u0917\u0932","\u092c\u0941\u0927","\u0917\u0941\u0930\u0941","\u0936\u0941\u0915\u094d\u0930","\u0936\u0928\u093f"],STANDALONESHORTWEEKDAYS:["\u0930\u0935\u093f","\u0938\u094b\u092e",
"\u092e\u0902\u0917\u0932","\u092c\u0941\u0927","\u0917\u0941\u0930\u0941","\u0936\u0941\u0915\u094d\u0930","\u0936\u0928\u093f"],NARROWWEEKDAYS:["\u0930","\u0938\u094b","\u092e\u0902","\u092c\u0941","\u0917\u0941","\u0936\u0941","\u0936"],STANDALONENARROWWEEKDAYS:["\u0930","\u0938\u094b","\u092e\u0902","\u092c\u0941","\u0917\u0941","\u0936\u0941","\u0936"],SHORTQUARTERS:["\u092a\u094d\u0930\u0925\u092e \u091a\u094c\u0925\u093e\u0908","\u0926\u094d\u0935\u093f\u0924\u0940\u092f \u091a\u094c\u0925\u093e\u0908",
"\u0924\u0943\u0924\u0940\u092f \u091a\u094c\u0925\u093e\u0908","\u091a\u0924\u0941\u0930\u094d\u0925 \u091a\u094c\u0925\u093e\u0908"],QUARTERS:["\u092a\u094d\u0930\u0925\u092e \u091a\u094c\u0925\u093e\u0908","\u0926\u094d\u0935\u093f\u0924\u0940\u092f \u091a\u094c\u0925\u093e\u0908","\u0924\u0943\u0924\u0940\u092f \u091a\u094c\u0925\u093e\u0908","\u091a\u0924\u0941\u0930\u094d\u0925 \u091a\u094c\u0925\u093e\u0908"],AMPMS:["AM","PM"],DATEFORMATS:["EEEE, d MMMM y","d MMMM y","dd-MM-yyyy","d-M-yy"],
TIMEFORMATS:["h:mm:ss a zzzz","h:mm:ss a z","h:mm:ss a","h:mm a"],AVAILABLEFORMATS:{Md:"d/M",MMMMd:"d MMMM",MMMd:"d MMM"},FIRSTDAYOFWEEK:6,WEEKENDRANGE:[6,6],FIRSTWEEKCUTOFFDAY:2};
goog.i18n.DateTimeSymbols_hr={ERAS:["pr.n.e.","AD"],ERANAMES:["Prije Krista","Poslije Krista"],NARROWMONTHS:["1.","2.","3.","4.","5.","6.","7.","8.","9.","10.","11.","12."],STANDALONENARROWMONTHS:["1.","2.","3.","4.","5.","6.","7.","8.","9.","10.","11.","12."],MONTHS:["sije\u010dnja","velja\u010de","o\u017eujka","travnja","svibnja","lipnja","srpnja","kolovoza","rujna","listopada","studenoga","prosinca"],STANDALONEMONTHS:["sije\u010danj","velja\u010da","o\u017eujak","travanj","svibanj","lipanj","srpanj",
"kolovoz","rujan","listopad","studeni","prosinac"],SHORTMONTHS:["01.","02.","03.","04.","05.","06.","07.","08.","09.","10.","11.","12."],STANDALONESHORTMONTHS:["01.","02.","03.","04.","05.","06.","07.","08.","09.","10.","11.","12."],WEEKDAYS:["nedjelja","ponedjeljak","utorak","srijeda","\u010detvrtak","petak","subota"],STANDALONEWEEKDAYS:["nedjelja","ponedjeljak","utorak","srijeda","\u010detvrtak","petak","subota"],SHORTWEEKDAYS:["ned","pon","uto","sri","\u010det","pet","sub"],STANDALONESHORTWEEKDAYS:["ned",
"pon","uto","sri","\u010det","pet","sub"],NARROWWEEKDAYS:["n","p","u","s","\u010d","p","s"],STANDALONENARROWWEEKDAYS:["n","p","u","s","\u010d","p","s"],SHORTQUARTERS:["1kv","2kv","3kv","4kv"],QUARTERS:["1. kvartal","2. kvartal","3. kvartal","4. kvartal"],AMPMS:["AM","PM"],DATEFORMATS:["EEEE, d. MMMM y.","d. MMMM y.","d.M.yyyy.","dd.MM.yyyy."],TIMEFORMATS:["HH:mm:ss zzzz","HH:mm:ss z","HH:mm:ss","HH:mm"],AVAILABLEFORMATS:{Md:"d.M.",MMMMd:"d. MMMM",MMMd:"d.MMM."},FIRSTDAYOFWEEK:0,WEEKENDRANGE:[5,6],
FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_hu={ERAS:["i. e.","i. sz."],ERANAMES:["id\u0151sz\u00e1m\u00edt\u00e1sunk el\u0151tt","id\u0151sz\u00e1m\u00edt\u00e1sunk szerint"],NARROWMONTHS:["J","F","M","\u00c1","M","J","J","A","Sz","O","N","D"],STANDALONENARROWMONTHS:["J","F","M","\u00c1","M","J","J","A","Sz","O","N","D"],MONTHS:["janu\u00e1r","febru\u00e1r","m\u00e1rcius","\u00e1prilis","m\u00e1jus","j\u00fanius","j\u00falius","augusztus","szeptember","okt\u00f3ber","november","december"],STANDALONEMONTHS:["janu\u00e1r","febru\u00e1r",
"m\u00e1rcius","\u00e1prilis","m\u00e1jus","j\u00fanius","j\u00falius","augusztus","szeptember","okt\u00f3ber","november","december"],SHORTMONTHS:["jan.","febr.","m\u00e1rc.","\u00e1pr.","m\u00e1j.","j\u00fan.","j\u00fal.","aug.","szept.","okt.","nov.","dec."],STANDALONESHORTMONTHS:["jan.","febr.","m\u00e1rc.","\u00e1pr.","m\u00e1j.","j\u00fan.","j\u00fal.","aug.","szept.","okt.","nov.","dec."],WEEKDAYS:["vas\u00e1rnap","h\u00e9tf\u0151","kedd","szerda","cs\u00fct\u00f6rt\u00f6k","p\u00e9ntek","szombat"],
STANDALONEWEEKDAYS:["vas\u00e1rnap","h\u00e9tf\u0151","kedd","szerda","cs\u00fct\u00f6rt\u00f6k","p\u00e9ntek","szombat"],SHORTWEEKDAYS:["V","H","K","Sze","Cs","P","Szo"],STANDALONESHORTWEEKDAYS:["V","H","K","Sze","Cs","P","Szo"],NARROWWEEKDAYS:["V","H","K","Sz","Cs","P","Sz"],STANDALONENARROWWEEKDAYS:["V","H","K","Sz","Cs","P","Sz"],SHORTQUARTERS:["N1","N2","N3","N4"],QUARTERS:["I. negyed\u00e9v","II. negyed\u00e9v","III. negyed\u00e9v","IV. negyed\u00e9v"],AMPMS:["de.","du."],DATEFORMATS:["y. MMMM d., EEEE",
"y. MMMM d.","yyyy.MM.dd.","yyyy.MM.dd."],TIMEFORMATS:["H:mm:ss zzzz","H:mm:ss z","H:mm:ss","H:mm"],AVAILABLEFORMATS:{Md:"M. d.",MMMMd:"MMMM d.",MMMd:"MMM d."},FIRSTDAYOFWEEK:0,WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_id={ERAS:["BCE","CE"],ERANAMES:["BCE","CE"],NARROWMONTHS:["1","2","3","4","5","6","7","8","9","10","11","12"],STANDALONENARROWMONTHS:["1","2","3","4","5","6","7","8","9","10","11","12"],MONTHS:["Januari","Februari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","November","Desember"],STANDALONEMONTHS:["Januari","Februari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","November","Desember"],SHORTMONTHS:["Jan","Feb","Mar","Apr","Mei",
"Jun","Jul","Agu","Sep","Okt","Nov","Des"],STANDALONESHORTMONTHS:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Agu","Sep","Okt","Nov","Des"],WEEKDAYS:["Minggu","Senin","Selasa","Rabu","Kamis","Jumat","Sabtu"],STANDALONEWEEKDAYS:["Minggu","Senin","Selasa","Rabu","Kamis","Jumat","Sabtu"],SHORTWEEKDAYS:["Min","Sen","Sel","Rab","Kam","Jum","Sab"],STANDALONESHORTWEEKDAYS:["Min","Sen","Sel","Rab","Kam","Jum","Sab"],NARROWWEEKDAYS:["1","2","3","4","5","6","7"],STANDALONENARROWWEEKDAYS:["1","2","3","4","5",
"6","7"],SHORTQUARTERS:["K1","K2","K3","K4"],QUARTERS:["kuartal pertama","kuartal kedua","kuartal ketiga","kuartal keempat"],AMPMS:["AM","PM"],DATEFORMATS:["EEEE, dd MMMM yyyy","d MMMM yyyy","d MMM yyyy","dd/MM/yy"],TIMEFORMATS:["H:mm:ss zzzz","HH:mm:ss z","HH:mm:ss","HH:mm"],AVAILABLEFORMATS:{Md:"M-d",MMMMd:"MMMM d",MMMd:"MMM d"},FIRSTDAYOFWEEK:0,WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_in={ERAS:["BCE","CE"],ERANAMES:["BCE","CE"],NARROWMONTHS:["1","2","3","4","5","6","7","8","9","10","11","12"],STANDALONENARROWMONTHS:["1","2","3","4","5","6","7","8","9","10","11","12"],MONTHS:["Januari","Februari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","November","Desember"],STANDALONEMONTHS:["Januari","Februari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","November","Desember"],SHORTMONTHS:["Jan","Feb","Mar","Apr","Mei",
"Jun","Jul","Agu","Sep","Okt","Nov","Des"],STANDALONESHORTMONTHS:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Agu","Sep","Okt","Nov","Des"],WEEKDAYS:["Minggu","Senin","Selasa","Rabu","Kamis","Jumat","Sabtu"],STANDALONEWEEKDAYS:["Minggu","Senin","Selasa","Rabu","Kamis","Jumat","Sabtu"],SHORTWEEKDAYS:["Min","Sen","Sel","Rab","Kam","Jum","Sab"],STANDALONESHORTWEEKDAYS:["Min","Sen","Sel","Rab","Kam","Jum","Sab"],NARROWWEEKDAYS:["1","2","3","4","5","6","7"],STANDALONENARROWWEEKDAYS:["1","2","3","4","5",
"6","7"],SHORTQUARTERS:["K1","K2","K3","K4"],QUARTERS:["kuartal pertama","kuartal kedua","kuartal ketiga","kuartal keempat"],AMPMS:["AM","PM"],DATEFORMATS:["EEEE, dd MMMM yyyy","d MMMM yyyy","d MMM yyyy","dd/MM/yy"],TIMEFORMATS:["H:mm:ss zzzz","HH:mm:ss z","HH:mm:ss","HH:mm"],AVAILABLEFORMATS:{Md:"M-d",MMMMd:"MMMM d",MMMd:"MMM d"},FIRSTDAYOFWEEK:0,WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_is={ERAS:["fyrir Krist","eftir Krist"],ERANAMES:["fyrir Krist","eftir Krist"],NARROWMONTHS:["j","f","m","a","m","j","j","\u00e1","s","o","n","d"],STANDALONENARROWMONTHS:["j","f","m","a","m","j","j","\u00e1","s","o","n","d"],MONTHS:["jan\u00faar","febr\u00faar","mars","apr\u00edl","ma\u00ed","j\u00fan\u00ed","j\u00fal\u00ed","\u00e1g\u00fast","september","okt\u00f3ber","n\u00f3vember","desember"],STANDALONEMONTHS:["jan\u00faar","febr\u00faar","mars","apr\u00edl","ma\u00ed",
"j\u00fan\u00ed","j\u00fal\u00ed","\u00e1g\u00fast","september","okt\u00f3ber","n\u00f3vember","desember"],SHORTMONTHS:["jan","feb","mar","apr","ma\u00ed","j\u00fan","j\u00fal","\u00e1g\u00fa","sep","okt","n\u00f3v","des"],STANDALONESHORTMONTHS:["jan","feb","mar","apr","ma\u00ed","j\u00fan","j\u00fal","\u00e1g\u00fa","sep","okt","n\u00f3v","des"],WEEKDAYS:["sunnudagur","m\u00e1nudagur","\u00feri\u00f0judagur","mi\u00f0vikudagur","fimmtudagur","f\u00f6studagur","laugardagur"],STANDALONEWEEKDAYS:["sunnudagur",
"m\u00e1nudagur","\u00feri\u00f0judagur","mi\u00f0vikudagur","fimmtudagur","f\u00f6studagur","laugardagur"],SHORTWEEKDAYS:["sun","m\u00e1n","\u00feri","mi\u00f0","fim","f\u00f6s","lau"],STANDALONESHORTWEEKDAYS:["sun","m\u00e1n","\u00feri","mi\u00f0","fim","f\u00f6s","lau"],NARROWWEEKDAYS:["s","m","\u00fe","m","f","f","l"],STANDALONENARROWWEEKDAYS:["s","m","\u00fe","m","f","f","l"],SHORTQUARTERS:["F1","F2","F3","F4"],QUARTERS:["1st fj\u00f3r\u00f0ungur","2nd fj\u00f3r\u00f0ungur","3rd fj\u00f3r\u00f0ungur",
"4th fj\u00f3r\u00f0ungur"],AMPMS:["f.h.","e.h."],DATEFORMATS:["EEEE, d. MMMM y","d. MMMM y","d.M.yyyy","d.M.yyyy"],TIMEFORMATS:["HH:mm:ss zzzz","HH:mm:ss z","HH:mm:ss","HH:mm"],AVAILABLEFORMATS:{Md:"d.M",MMMMd:"d. MMMM",MMMd:"d. MMM"},FIRSTDAYOFWEEK:6,WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:2};
goog.i18n.DateTimeSymbols_it={ERAS:["aC","dC"],ERANAMES:["a.C.","d.C"],NARROWMONTHS:["G","F","M","A","M","G","L","A","S","O","N","D"],STANDALONENARROWMONTHS:["G","F","M","A","M","G","L","A","S","O","N","D"],MONTHS:["gennaio","febbraio","marzo","aprile","maggio","giugno","luglio","agosto","settembre","ottobre","novembre","dicembre"],STANDALONEMONTHS:["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"],SHORTMONTHS:["gen","feb","mar",
"apr","mag","giu","lug","ago","set","ott","nov","dic"],STANDALONESHORTMONTHS:["gen","feb","mar","apr","mag","giu","lug","ago","set","ott","nov","dic"],WEEKDAYS:["domenica","luned\u00ec","marted\u00ec","mercoled\u00ec","gioved\u00ec","venerd\u00ec","sabato"],STANDALONEWEEKDAYS:["Domenica","Luned\u00ec","Marted\u00ec","Mercoled\u00ec","Gioved\u00ec","Venerd\u00ec","Sabato"],SHORTWEEKDAYS:["dom","lun","mar","mer","gio","ven","sab"],STANDALONESHORTWEEKDAYS:["dom","lun","mar","mer","gio","ven","sab"],
NARROWWEEKDAYS:["D","L","M","M","G","V","S"],STANDALONENARROWWEEKDAYS:["D","L","M","M","G","V","S"],SHORTQUARTERS:["T1","T2","T3","T4"],QUARTERS:["1o trimestre","2o trimestre","3o trimestre","4o trimestre"],AMPMS:["m.","p."],DATEFORMATS:["EEEE d MMMM y","dd MMMM y","dd/MMM/y","dd/MM/yy"],TIMEFORMATS:["HH.mm.ss zzzz","HH.mm.ss z","HH.mm.ss","HH.mm"],AVAILABLEFORMATS:{Md:"d/M",MMMMd:"d MMMM",MMMd:"d MMM"},FIRSTDAYOFWEEK:0,WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_iw={ERAS:["\u05dc\u05e4\u05e0\u05d4\u05f4\u05e1","\u05dc\u05e1\u05d4\u05f4\u05e0"],ERANAMES:["\u05dc\u05e4\u05e0\u05d9 \u05d4\u05e1\u05e4\u05d9\u05e8\u05d4","\u05dc\u05e1\u05e4\u05d9\u05e8\u05d4"],NARROWMONTHS:["1","2","3","4","5","6","7","8","9","10","11","12"],STANDALONENARROWMONTHS:["1","2","3","4","5","6","7","8","9","10","11","12"],MONTHS:["\u05d9\u05e0\u05d5\u05d0\u05e8","\u05e4\u05d1\u05e8\u05d5\u05d0\u05e8","\u05de\u05e8\u05e1","\u05d0\u05e4\u05e8\u05d9\u05dc","\u05de\u05d0\u05d9",
"\u05d9\u05d5\u05e0\u05d9","\u05d9\u05d5\u05dc\u05d9","\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8","\u05e1\u05e4\u05d8\u05de\u05d1\u05e8","\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8","\u05e0\u05d5\u05d1\u05de\u05d1\u05e8","\u05d3\u05e6\u05de\u05d1\u05e8"],STANDALONEMONTHS:["\u05d9\u05e0\u05d5\u05d0\u05e8","\u05e4\u05d1\u05e8\u05d5\u05d0\u05e8","\u05de\u05e8\u05e1","\u05d0\u05e4\u05e8\u05d9\u05dc","\u05de\u05d0\u05d9","\u05d9\u05d5\u05e0\u05d9","\u05d9\u05d5\u05dc\u05d9","\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8",
"\u05e1\u05e4\u05d8\u05de\u05d1\u05e8","\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8","\u05e0\u05d5\u05d1\u05de\u05d1\u05e8","\u05d3\u05e6\u05de\u05d1\u05e8"],SHORTMONTHS:["\u05d9\u05e0\u05d5","\u05e4\u05d1\u05e8","\u05de\u05e8\u05e1","\u05d0\u05e4\u05e8","\u05de\u05d0\u05d9","\u05d9\u05d5\u05e0","\u05d9\u05d5\u05dc","\u05d0\u05d5\u05d2","\u05e1\u05e4\u05d8","\u05d0\u05d5\u05e7","\u05e0\u05d5\u05d1","\u05d3\u05e6\u05de"],STANDALONESHORTMONTHS:["\u05d9\u05e0\u05d5","\u05e4\u05d1\u05e8","\u05de\u05e8\u05e1",
"\u05d0\u05e4\u05e8","\u05de\u05d0\u05d9","\u05d9\u05d5\u05e0","\u05d9\u05d5\u05dc","\u05d0\u05d5\u05d2","\u05e1\u05e4\u05d8","\u05d0\u05d5\u05e7","\u05e0\u05d5\u05d1","\u05d3\u05e6\u05de"],WEEKDAYS:["\u05d9\u05d5\u05dd \u05e8\u05d0\u05e9\u05d5\u05df","\u05d9\u05d5\u05dd \u05e9\u05e0\u05d9","\u05d9\u05d5\u05dd \u05e9\u05dc\u05d9\u05e9\u05d9","\u05d9\u05d5\u05dd \u05e8\u05d1\u05d9\u05e2\u05d9","\u05d9\u05d5\u05dd \u05d7\u05de\u05d9\u05e9\u05d9","\u05d9\u05d5\u05dd \u05e9\u05d9\u05e9\u05d9","\u05d9\u05d5\u05dd \u05e9\u05d1\u05ea"],
STANDALONEWEEKDAYS:["\u05d9\u05d5\u05dd \u05e8\u05d0\u05e9\u05d5\u05df","\u05d9\u05d5\u05dd \u05e9\u05e0\u05d9","\u05d9\u05d5\u05dd \u05e9\u05dc\u05d9\u05e9\u05d9","\u05d9\u05d5\u05dd \u05e8\u05d1\u05d9\u05e2\u05d9","\u05d9\u05d5\u05dd \u05d7\u05de\u05d9\u05e9\u05d9","\u05d9\u05d5\u05dd \u05e9\u05d9\u05e9\u05d9","\u05d9\u05d5\u05dd \u05e9\u05d1\u05ea"],SHORTWEEKDAYS:["\u05d9\u05d5\u05dd \u05d0'","\u05d9\u05d5\u05dd \u05d1'","\u05d9\u05d5\u05dd \u05d2'","\u05d9\u05d5\u05dd \u05d3'","\u05d9\u05d5\u05dd \u05d4'",
"\u05d9\u05d5\u05dd \u05d5'","\u05e9\u05d1\u05ea"],STANDALONESHORTWEEKDAYS:["\u05d9\u05d5\u05dd \u05d0'","\u05d9\u05d5\u05dd \u05d1'","\u05d9\u05d5\u05dd \u05d2'","\u05d9\u05d5\u05dd \u05d3'","\u05d9\u05d5\u05dd \u05d4'","\u05d9\u05d5\u05dd \u05d5'","\u05e9\u05d1\u05ea"],NARROWWEEKDAYS:["\u05d0","\u05d1","\u05d2","\u05d3","\u05d4","\u05d5","\u05e9"],STANDALONENARROWWEEKDAYS:["\u05d0","\u05d1","\u05d2","\u05d3","\u05d4","\u05d5","\u05e9"],SHORTQUARTERS:["\u05e8\u05d1\u05e2\u05d5\u05df 1","\u05e8\u05d1\u05e2\u05d5\u05df 2",
"\u05e8\u05d1\u05e2\u05d5\u05df 3","\u05e8\u05d1\u05e2\u05d5\u05df 4"],QUARTERS:["\u05e8\u05d1\u05e2\u05d5\u05df 1","\u05e8\u05d1\u05e2\u05d5\u05df 2","\u05e8\u05d1\u05e2\u05d5\u05df 3","\u05e8\u05d1\u05e2\u05d5\u05df 4"],AMPMS:['\u05dc\u05e4\u05e0\u05d4"\u05e6','\u05d0\u05d7\u05d4"\u05e6'],DATEFORMATS:["EEEE, d \u05d1MMMM y","d \u05d1MMMM y","dd/MM/yyyy","dd/MM/yy"],TIMEFORMATS:["HH:mm:ss zzzz","HH:mm:ss z","HH:mm:ss","HH:mm"],AVAILABLEFORMATS:{Md:"d/M",MMMMd:"d \u05d1MMMM",MMMd:"MMM d"},FIRSTDAYOFWEEK:0,
WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_ja={ERAS:["\u7d00\u5143\u524d","\u897f\u66a6"],ERANAMES:["\u7d00\u5143\u524d","\u897f\u66a6"],NARROWMONTHS:["1","2","3","4","5","6","7","8","9","10","11","12"],STANDALONENARROWMONTHS:["1","2","3","4","5","6","7","8","9","10","11","12"],MONTHS:["1\u6708","2\u6708","3\u6708","4\u6708","5\u6708","6\u6708","7\u6708","8\u6708","9\u6708","10\u6708","11\u6708","12\u6708"],STANDALONEMONTHS:["1\u6708","2\u6708","3\u6708","4\u6708","5\u6708","6\u6708","7\u6708","8\u6708","9\u6708",
"10\u6708","11\u6708","12\u6708"],SHORTMONTHS:["1\u6708","2\u6708","3\u6708","4\u6708","5\u6708","6\u6708","7\u6708","8\u6708","9\u6708","10\u6708","11\u6708","12\u6708"],STANDALONESHORTMONTHS:["1\u6708","2\u6708","3\u6708","4\u6708","5\u6708","6\u6708","7\u6708","8\u6708","9\u6708","10\u6708","11\u6708","12\u6708"],WEEKDAYS:["\u65e5\u66dc\u65e5","\u6708\u66dc\u65e5","\u706b\u66dc\u65e5","\u6c34\u66dc\u65e5","\u6728\u66dc\u65e5","\u91d1\u66dc\u65e5","\u571f\u66dc\u65e5"],STANDALONEWEEKDAYS:["\u65e5\u66dc\u65e5",
"\u6708\u66dc\u65e5","\u706b\u66dc\u65e5","\u6c34\u66dc\u65e5","\u6728\u66dc\u65e5","\u91d1\u66dc\u65e5","\u571f\u66dc\u65e5"],SHORTWEEKDAYS:["\u65e5","\u6708","\u706b","\u6c34","\u6728","\u91d1","\u571f"],STANDALONESHORTWEEKDAYS:["\u65e5","\u6708","\u706b","\u6c34","\u6728","\u91d1","\u571f"],NARROWWEEKDAYS:["\u65e5","\u6708","\u706b","\u6c34","\u6728","\u91d1","\u571f"],STANDALONENARROWWEEKDAYS:["\u65e5","\u6708","\u706b","\u6c34","\u6728","\u91d1","\u571f"],SHORTQUARTERS:["Q1","Q2","Q3","Q4"],
QUARTERS:["\u7b2c1\u56db\u534a\u671f","\u7b2c2\u56db\u534a\u671f","\u7b2c3\u56db\u534a\u671f","\u7b2c4\u56db\u534a\u671f"],AMPMS:["\u5348\u524d","\u5348\u5f8c"],DATEFORMATS:["y\u5e74M\u6708d\u65e5EEEE","y\u5e74M\u6708d\u65e5","yyyy/MM/dd","yy/MM/dd"],TIMEFORMATS:["H\u6642mm\u5206ss\u79d2 zzzz","HH:mm:ss z","H:mm:ss","H:mm"],AVAILABLEFORMATS:{Md:"M/d",MMMMd:"M\u6708d\u65e5",MMMd:"M\u6708d\u65e5"},FIRSTDAYOFWEEK:6,WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:2};
goog.i18n.DateTimeSymbols_kn={ERAS:["BCE","CE"],ERANAMES:["\u0c88\u0cb8\u0caa\u0cc2\u0cb5\u0cef.","\u0c95\u0ccd\u0cb0\u0cbf\u0cb8\u0ccd\u0ca4 \u0cb6\u0c95"],NARROWMONTHS:["\u0c9c","\u0cab\u0cc6","\u0cae\u0cbe","\u0c8e","\u0cae\u0cc7","\u0c9c\u0cc2","\u0c9c\u0cc1","\u0c86","\u0cb8\u0cc6","\u0c85","\u0ca8","\u0ca1\u0cbf"],STANDALONENARROWMONTHS:["\u0c9c","\u0cab\u0cc6","\u0cae\u0cbe","\u0c8e","\u0cae\u0cc7","\u0c9c\u0cc2","\u0c9c\u0cc1","\u0c86","\u0cb8\u0cc6","\u0c85","\u0ca8","\u0ca1\u0cbf"],MONTHS:["\u0c9c\u0ca8\u0cb5\u0cb0\u0cc0",
"\u0cab\u0cc6\u0cac\u0ccd\u0cb0\u0cb5\u0cb0\u0cc0","\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd","\u0c8e\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd","\u0cae\u0cc6","\u0c9c\u0cc2\u0ca8\u0ccd","\u0c9c\u0cc1\u0cb2\u0cc8","\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd","\u0cb8\u0caa\u0ccd\u0c9f\u0cc6\u0c82\u0cac\u0cb0\u0ccd","\u0c85\u0c95\u0ccd\u0c9f\u0ccb\u0cac\u0cb0\u0ccd","\u0ca8\u0cb5\u0cc6\u0c82\u0cac\u0cb0\u0ccd","\u0ca1\u0cbf\u0cb8\u0cc6\u0c82\u0cac\u0cb0\u0ccd"],STANDALONEMONTHS:["\u0c9c\u0ca8\u0cb5\u0cb0\u0cc0","\u0cab\u0cc6\u0cac\u0ccd\u0cb0\u0cb5\u0cb0\u0cc0",
"\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd","\u0c8e\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd","\u0cae\u0cc6","\u0c9c\u0cc2\u0ca8\u0ccd","\u0c9c\u0cc1\u0cb2\u0cc8","\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd","\u0cb8\u0caa\u0ccd\u0c9f\u0cc6\u0c82\u0cac\u0cb0\u0ccd","\u0c85\u0c95\u0ccd\u0c9f\u0ccb\u0cac\u0cb0\u0ccd","\u0ca8\u0cb5\u0cc6\u0c82\u0cac\u0cb0\u0ccd","\u0ca1\u0cbf\u0cb8\u0cc6\u0c82\u0cac\u0cb0\u0ccd"],SHORTMONTHS:["\u0c9c\u0ca8\u0cb5\u0cb0\u0cc0","\u0cab\u0cc6\u0cac\u0ccd\u0cb0\u0cb5\u0cb0\u0cc0","\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd",
"\u0c8e\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd","\u0cae\u0cc6","\u0c9c\u0cc2\u0ca8\u0ccd","\u0c9c\u0cc1\u0cb2\u0cc8","\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd","\u0cb8\u0caa\u0ccd\u0c9f\u0cc6\u0c82\u0cac\u0cb0\u0ccd","\u0c85\u0c95\u0ccd\u0c9f\u0ccb\u0cac\u0cb0\u0ccd","\u0ca8\u0cb5\u0cc6\u0c82\u0cac\u0cb0\u0ccd","\u0ca1\u0cbf\u0cb8\u0cc6\u0c82\u0cac\u0cb0\u0ccd"],STANDALONESHORTMONTHS:["\u0c9c\u0ca8\u0cb5\u0cb0\u0cc0","\u0cab\u0cc6\u0cac\u0ccd\u0cb0\u0cb5\u0cb0\u0cc0","\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd",
"\u0c8e\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd","\u0cae\u0cc6","\u0c9c\u0cc2\u0ca8\u0ccd","\u0c9c\u0cc1\u0cb2\u0cc8","\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd","\u0cb8\u0caa\u0ccd\u0c9f\u0cc6\u0c82\u0cac\u0cb0\u0ccd","\u0c85\u0c95\u0ccd\u0c9f\u0ccb\u0cac\u0cb0\u0ccd","\u0ca8\u0cb5\u0cc6\u0c82\u0cac\u0cb0\u0ccd","\u0ca1\u0cbf\u0cb8\u0cc6\u0c82\u0cac\u0cb0\u0ccd"],WEEKDAYS:["\u0cb0\u0cb5\u0cbf\u0cb5\u0cbe\u0cb0","\u0cb8\u0ccb\u0cae\u0cb5\u0cbe\u0cb0","\u0cae\u0c82\u0c97\u0cb3\u0cb5\u0cbe\u0cb0","\u0cac\u0cc1\u0ca7\u0cb5\u0cbe\u0cb0",
"\u0c97\u0cc1\u0cb0\u0cc1\u0cb5\u0cbe\u0cb0","\u0cb6\u0cc1\u0c95\u0ccd\u0cb0\u0cb5\u0cbe\u0cb0","\u0cb6\u0ca8\u0cbf\u0cb5\u0cbe\u0cb0"],STANDALONEWEEKDAYS:["\u0cb0\u0cb5\u0cbf\u0cb5\u0cbe\u0cb0","\u0cb8\u0ccb\u0cae\u0cb5\u0cbe\u0cb0","\u0cae\u0c82\u0c97\u0cb3\u0cb5\u0cbe\u0cb0","\u0cac\u0cc1\u0ca7\u0cb5\u0cbe\u0cb0","\u0c97\u0cc1\u0cb0\u0cc1\u0cb5\u0cbe\u0cb0","\u0cb6\u0cc1\u0c95\u0ccd\u0cb0\u0cb5\u0cbe\u0cb0","\u0cb6\u0ca8\u0cbf\u0cb5\u0cbe\u0cb0"],SHORTWEEKDAYS:["\u0cb0.","\u0cb8\u0ccb.","\u0cae\u0c82.",
"\u0cac\u0cc1.","\u0c97\u0cc1.","\u0cb6\u0cc1.","\u0cb6\u0ca8\u0cbf."],STANDALONESHORTWEEKDAYS:["\u0cb0.","\u0cb8\u0ccb.","\u0cae\u0c82.","\u0cac\u0cc1.","\u0c97\u0cc1.","\u0cb6\u0cc1.","\u0cb6\u0ca8\u0cbf."],NARROWWEEKDAYS:["\u0cb0","\u0cb8\u0ccb","\u0cae\u0c82","\u0cac\u0cc1","\u0c97\u0cc1","\u0cb6\u0cc1","\u0cb6"],STANDALONENARROWWEEKDAYS:["\u0cb0","\u0cb8\u0ccb","\u0cae\u0c82","\u0cac\u0cc1","\u0c97\u0cc1","\u0cb6\u0cc1","\u0cb6"],SHORTQUARTERS:["Q1","Q2","Q3","Q4"],QUARTERS:["\u0c92\u0c82\u0ca6\u0cc1 1",
"\u0c8e\u0cb0\u0ca1\u0cc1 2","\u0cae\u0cc2\u0cb0\u0cc1 3","\u0ca8\u0cbe\u0cb2\u0cc3\u0c95 4"],AMPMS:["am","pm"],DATEFORMATS:["EEEE d MMMM y","d MMMM y","d MMM y","d-M-yy"],TIMEFORMATS:["hh:mm:ss a zzzz","hh:mm:ss a z","hh:mm:ss a","hh:mm a"],AVAILABLEFORMATS:{Md:"M-d",MMMMd:"d MMMM",MMMd:"MMM d"},FIRSTDAYOFWEEK:6,WEEKENDRANGE:[6,6],FIRSTWEEKCUTOFFDAY:2};
goog.i18n.DateTimeSymbols_ko={ERAS:["\uae30\uc6d0\uc804","\uc11c\uae30"],ERANAMES:["\uc11c\ub825\uae30\uc6d0\uc804","\uc11c\ub825\uae30\uc6d0"],NARROWMONTHS:["1\uc6d4","2\uc6d4","3\uc6d4","4\uc6d4","5\uc6d4","6\uc6d4","7\uc6d4","8\uc6d4","9\uc6d4","10\uc6d4","11\uc6d4","12\uc6d4"],STANDALONENARROWMONTHS:["1\uc6d4","2\uc6d4","3\uc6d4","4\uc6d4","5\uc6d4","6\uc6d4","7\uc6d4","8\uc6d4","9\uc6d4","10\uc6d4","11\uc6d4","12\uc6d4"],MONTHS:["1\uc6d4","2\uc6d4","3\uc6d4","4\uc6d4","5\uc6d4","6\uc6d4","7\uc6d4",
"8\uc6d4","9\uc6d4","10\uc6d4","11\uc6d4","12\uc6d4"],STANDALONEMONTHS:["1\uc6d4","2\uc6d4","3\uc6d4","4\uc6d4","5\uc6d4","6\uc6d4","7\uc6d4","8\uc6d4","9\uc6d4","10\uc6d4","11\uc6d4","12\uc6d4"],SHORTMONTHS:["1\uc6d4","2\uc6d4","3\uc6d4","4\uc6d4","5\uc6d4","6\uc6d4","7\uc6d4","8\uc6d4","9\uc6d4","10\uc6d4","11\uc6d4","12\uc6d4"],STANDALONESHORTMONTHS:["1\uc6d4","2\uc6d4","3\uc6d4","4\uc6d4","5\uc6d4","6\uc6d4","7\uc6d4","8\uc6d4","9\uc6d4","10\uc6d4","11\uc6d4","12\uc6d4"],WEEKDAYS:["\uc77c\uc694\uc77c",
"\uc6d4\uc694\uc77c","\ud654\uc694\uc77c","\uc218\uc694\uc77c","\ubaa9\uc694\uc77c","\uae08\uc694\uc77c","\ud1a0\uc694\uc77c"],STANDALONEWEEKDAYS:["\uc77c\uc694\uc77c","\uc6d4\uc694\uc77c","\ud654\uc694\uc77c","\uc218\uc694\uc77c","\ubaa9\uc694\uc77c","\uae08\uc694\uc77c","\ud1a0\uc694\uc77c"],SHORTWEEKDAYS:["\uc77c","\uc6d4","\ud654","\uc218","\ubaa9","\uae08","\ud1a0"],STANDALONESHORTWEEKDAYS:["\uc77c","\uc6d4","\ud654","\uc218","\ubaa9","\uae08","\ud1a0"],NARROWWEEKDAYS:["\uc77c","\uc6d4","\ud654",
"\uc218","\ubaa9","\uae08","\ud1a0"],STANDALONENARROWWEEKDAYS:["\uc77c","\uc6d4","\ud654","\uc218","\ubaa9","\uae08","\ud1a0"],SHORTQUARTERS:["1\ubd84\uae30","2\ubd84\uae30","3\ubd84\uae30","4\ubd84\uae30"],QUARTERS:["\uc81c 1/4\ubd84\uae30","\uc81c 2/4\ubd84\uae30","\uc81c 3/4\ubd84\uae30","\uc81c 4/4\ubd84\uae30"],AMPMS:["\uc624\uc804","\uc624\ud6c4"],DATEFORMATS:["y\ub144 M\uc6d4 d\uc77c EEEE","y\ub144 M\uc6d4 d\uc77c","yyyy. M. d.","yy. M. d."],TIMEFORMATS:["a hh\uc2dc mm\ubd84 ss\ucd08 zzzz",
"a hh\uc2dc mm\ubd84 ss\ucd08 z","a h:mm:ss","a h:mm"],AVAILABLEFORMATS:{Md:"M. d.",MMMMd:"MMMM d\uc77c",MMMd:"MMM d\uc77c"},FIRSTDAYOFWEEK:6,WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:2};
goog.i18n.DateTimeSymbols_ln={ERAS:["libos\u00f3 ya Y.-K.","nsima ya Y.-K."],ERANAMES:["libos\u00f3 ya Y.-K.","nsima ya Y.-K."],NARROWMONTHS:["1","2","3","4","5","6","7","8","9","10","11","12"],STANDALONENARROWMONTHS:["1","2","3","4","5","6","7","8","9","10","11","12"],MONTHS:["s\u00e1nz\u00e1 ya yambo","s\u00e1nz\u00e1 ya m\u00edbal\u00e9","s\u00e1nz\u00e1 ya m\u00eds\u00e1to","s\u00e1nz\u00e1 ya m\u00ednei","s\u00e1nz\u00e1 ya m\u00edt\u00e1no","s\u00e1nz\u00e1 ya mot\u00f3b\u00e1","s\u00e1nz\u00e1 ya nsambo",
"s\u00e1nz\u00e1 ya mwambe","s\u00e1nz\u00e1 ya libwa","s\u00e1nz\u00e1 ya z\u00f3mi","s\u00e1nz\u00e1 ya z\u00f3mi na m\u0254\u030ck\u0254\u0301","s\u00e1nz\u00e1 ya z\u00f3mi na m\u00edbal\u00e9"],STANDALONEMONTHS:["s\u00e1nz\u00e1 ya yambo","s\u00e1nz\u00e1 ya m\u00edbal\u00e9","s\u00e1nz\u00e1 ya m\u00eds\u00e1to","s\u00e1nz\u00e1 ya m\u00ednei","s\u00e1nz\u00e1 ya m\u00edt\u00e1no","s\u00e1nz\u00e1 ya mot\u00f3b\u00e1","s\u00e1nz\u00e1 ya nsambo","s\u00e1nz\u00e1 ya mwambe","s\u00e1nz\u00e1 ya libwa",
"s\u00e1nz\u00e1 ya z\u00f3mi","s\u00e1nz\u00e1 ya z\u00f3mi na m\u0254\u030ck\u0254\u0301","s\u00e1nz\u00e1 ya z\u00f3mi na m\u00edbal\u00e9"],SHORTMONTHS:["s1","s2","s3","s4","s5","s6","s7","s8","s9","s10","s11","s12"],STANDALONESHORTMONTHS:["s1","s2","s3","s4","s5","s6","s7","s8","s9","s10","s11","s12"],WEEKDAYS:["eyenga","mok\u0254l\u0254 ya libos\u00f3","mok\u0254l\u0254 ya m\u00edbal\u00e9","mok\u0254l\u0254 ya m\u00eds\u00e1to","mok\u0254l\u0254 ya m\u00edn\u00e9i","mok\u0254l\u0254 ya m\u00edt\u00e1no",
"mp\u0254\u0301s\u0254"],STANDALONEWEEKDAYS:["eyenga","mok\u0254l\u0254 ya libos\u00f3","mok\u0254l\u0254 ya m\u00edbal\u00e9","mok\u0254l\u0254 ya m\u00eds\u00e1to","mok\u0254l\u0254 ya m\u00edn\u00e9i","mok\u0254l\u0254 ya m\u00edt\u00e1no","mp\u0254\u0301s\u0254"],SHORTWEEKDAYS:["eye","m1","m2","m3","m4","m5","mps"],STANDALONESHORTWEEKDAYS:["eye","m1","m2","m3","m4","m5","mps"],NARROWWEEKDAYS:["1","2","3","4","5","6","7"],STANDALONENARROWWEEKDAYS:["1","2","3","4","5","6","7"],SHORTQUARTERS:["SM1",
"SM2","SM3","SM4"],QUARTERS:["s\u00e1nz\u00e1 m\u00eds\u00e1to ya yambo","s\u00e1nz\u00e1 m\u00eds\u00e1to ya m\u00edbal\u00e9","s\u00e1nz\u00e1 m\u00eds\u00e1to ya m\u00eds\u00e1to","s\u00e1nz\u00e1 m\u00eds\u00e1to ya m\u00ednei"],AMPMS:["AM","PM"],DATEFORMATS:["EEEE, y MMMM dd","y MMMM d","y MMM d","yy/MM/dd"],TIMEFORMATS:["HH:mm:ss zzzz","HH:mm:ss z","HH:mm:ss","HH:mm"],AVAILABLEFORMATS:{Md:"M-d",MMMMd:"MMMM d",MMMd:"MMM d"},FIRSTDAYOFWEEK:0,WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_lt={ERAS:["pr. Kr.","po Kr."],ERANAMES:["prie\u0161 Krist\u0173","po Kristaus"],NARROWMONTHS:["S","V","K","B","G","B","L","R","R","S","L","G"],STANDALONENARROWMONTHS:["S","V","K","B","G","B","L","R","R","S","L","G"],MONTHS:["sausio","vasario","kovo","baland\u017eio","gegu\u017e\u0117s","bir\u017eelio","liepos","rugpj\u016b\u010dio","rugs\u0117jo","spalio","lapkri\u010dio","gruod\u017eio"],STANDALONEMONTHS:["Sausis","Vasaris","Kovas","Balandis","Gegu\u017e\u0117","Bir\u017eelis",
"Liepa","Rugpj\u016btis","Rugs\u0117jis","Spalis","Lapkritis","Gruodis"],SHORTMONTHS:["Sau","Vas","Kov","Bal","Geg","Bir","Lie","Rgp","Rgs","Spl","Lap","Grd"],STANDALONESHORTMONTHS:["Sau","Vas","Kov","Bal","Geg","Bir","Lie","Rgp","Rgs","Spl","Lap","Grd"],WEEKDAYS:["sekmadienis","pirmadienis","antradienis","tre\u010diadienis","ketvirtadienis","penktadienis","\u0161e\u0161tadienis"],STANDALONEWEEKDAYS:["sekmadienis","pirmadienis","antradienis","tre\u010diadienis","ketvirtadienis","penktadienis","\u0161e\u0161tadienis"],
SHORTWEEKDAYS:["Sk","Pr","An","Tr","Kt","Pn","\u0160t"],STANDALONESHORTWEEKDAYS:["Sk","Pr","An","Tr","Kt","Pn","\u0160t"],NARROWWEEKDAYS:["S","P","A","T","K","P","\u0160"],STANDALONENARROWWEEKDAYS:["S","P","A","T","K","P","\u0160"],SHORTQUARTERS:["K1","K2","K3","K4"],QUARTERS:["pirmas ketvirtis","antras ketvirtis","tre\u010dias ketvirtis","ketvirtas ketvirtis"],AMPMS:["prie\u0161piet","popiet"],DATEFORMATS:["y 'm'. MMMM d 'd'.,EEEE","y 'm'. MMMM d 'd'.","yyyy.MM.dd","yyyy-MM-dd"],TIMEFORMATS:["HH:mm:ss zzzz",
"HH:mm:ss z","HH:mm:ss","HH:mm"],AVAILABLEFORMATS:{Md:"M-d",MMMMd:"MMMM d",MMMd:"MMM d"},FIRSTDAYOFWEEK:0,WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_lv={ERAS:["p.m.\u0113.","m.\u0113."],ERANAMES:["pirms m\u016bsu \u0113ras","m\u016bsu \u0113r\u0101"],NARROWMONTHS:["J","F","M","A","M","J","J","A","S","O","N","D"],STANDALONENARROWMONTHS:["J","F","M","A","M","J","J","A","S","O","N","D"],MONTHS:["janv\u0101ris","febru\u0101ris","marts","apr\u012blis","maijs","j\u016bnijs","j\u016blijs","augusts","septembris","oktobris","novembris","decembris"],STANDALONEMONTHS:["janv\u0101ris","febru\u0101ris","marts","apr\u012blis","maijs",
"j\u016bnijs","j\u016blijs","augusts","septembris","oktobris","novembris","decembris"],SHORTMONTHS:["janv.","febr.","marts","apr.","maijs","j\u016bn.","j\u016bl.","aug.","sept.","okt.","nov.","dec."],STANDALONESHORTMONTHS:["janv.","febr.","marts","apr.","maijs","j\u016bn.","j\u016bl.","aug.","sept.","okt.","nov.","dec."],WEEKDAYS:["sv\u0113tdiena","pirmdiena","otrdiena","tre\u0161diena","ceturtdiena","piektdiena","sestdiena"],STANDALONEWEEKDAYS:["sv\u0113tdiena","pirmdiena","otrdiena","tre\u0161diena",
"ceturtdiena","piektdiena","sestdiena"],SHORTWEEKDAYS:["Sv","Pr","Ot","Tr","Ce","Pk","Se"],STANDALONESHORTWEEKDAYS:["Sv","Pr","Ot","Tr","Ce","Pk","Se"],NARROWWEEKDAYS:["S","P","O","T","C","P","S"],STANDALONENARROWWEEKDAYS:["S","P","O","T","C","P","S"],SHORTQUARTERS:["C1","C2","C3","C4"],QUARTERS:["1. ceturksnis","2. ceturksnis","3. ceturksnis","4. ceturksnis"],AMPMS:["AM","PM"],DATEFORMATS:["EEEE, y. 'gada' d. MMMM","y. 'gada' d. MMMM","y. 'gada' d. MMM","dd.MM.yy"],TIMEFORMATS:["HH:mm:ss zzzz","HH:mm:ss z",
"HH:mm:ss","HH:mm"],AVAILABLEFORMATS:{Md:"dd.mm.",MMMMd:"d. MMMM",MMMd:"d. MMM"},FIRSTDAYOFWEEK:0,WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_ml={ERAS:["\u0d15\u0d4d\u0d30\u0d3f.\u0d2e\u0d41.","\u0d15\u0d4d\u0d30\u0d3f.\u0d2a\u0d3f."],ERANAMES:["\u0d15\u0d4d\u0d30\u0d3f\u0d38\u0d4d\u0d24\u0d41\u0d35\u0d3f\u0d28\u0d41\u0d4d \u0d2e\u0d41\u0d2e\u0d4d\u0d2a\u0d4d","\u0d15\u0d4d\u0d30\u0d3f\u0d38\u0d4d\u0d24\u0d41\u0d35\u0d3f\u0d28\u0d4d \u0d2a\u0d3f\u0d28\u0d4d\u0d2a\u0d4d"],NARROWMONTHS:["\u0d1c","\u0d2b\u0d46","\u0d2e\u0d3e","\u0d0f","\u0d2e\u0d47","\u0d1c\u0d42","\u0d1c\u0d42","\u0d13","\u0d38\u0d46","\u0d12","\u0d28",
"\u0d21\u0d3f"],STANDALONENARROWMONTHS:["\u0d1c","\u0d2b\u0d46","\u0d2e\u0d3e","\u0d0f","\u0d2e\u0d47","\u0d1c\u0d42","\u0d1c\u0d42","\u0d13","\u0d38\u0d46","\u0d12","\u0d28","\u0d21\u0d3f"],MONTHS:["\u0d1c\u0d28\u0d41\u0d35\u0d30\u0d3f","\u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41\u0d35\u0d30\u0d3f","\u0d2e\u0d3e\u0d30\u0d4d\u0d1a\u0d4d\u0d1a\u0d4d","\u0d0f\u0d2a\u0d4d\u0d30\u0d3f\u0d32\u0d4d","\u0d2e\u0d47\u0d2f\u0d4d","\u0d1c\u0d42\u0d23\u0d4d","\u0d1c\u0d42\u0d32\u0d48","\u0d13\u0d17\u0d38\u0d4d\u0d31\u0d4d\u0d31\u0d4d",
"\u0d38\u0d46\u0d2a\u0d4d\u0d31\u0d4d\u0d31\u0d02\u0d2c\u0d30\u0d4d","\u0d12\u0d15\u0d4d\u0d1f\u0d4b\u0d2c\u0d30\u0d4d","\u0d28\u0d35\u0d02\u0d2c\u0d30\u0d4d","\u0d21\u0d3f\u0d38\u0d02\u0d2c\u0d30\u0d4d"],STANDALONEMONTHS:["\u0d1c\u0d28\u0d41\u0d35\u0d30\u0d3f","\u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41\u0d35\u0d30\u0d3f","\u0d2e\u0d3e\u0d30\u0d4d\u0d1a\u0d4d\u0d1a\u0d4d","\u0d0f\u0d2a\u0d4d\u0d30\u0d3f\u0d32\u0d4d","\u0d2e\u0d47\u0d2f\u0d4d","\u0d1c\u0d42\u0d23\u0d4d","\u0d1c\u0d42\u0d32\u0d48","\u0d13\u0d17\u0d38\u0d4d\u0d31\u0d4d\u0d31\u0d4d",
"\u0d38\u0d46\u0d2a\u0d4d\u0d31\u0d4d\u0d31\u0d02\u0d2c\u0d30\u0d4d","\u0d12\u0d15\u0d4d\u0d1f\u0d4b\u0d2c\u0d30\u0d4d","\u0d28\u0d35\u0d02\u0d2c\u0d30\u0d4d","\u0d21\u0d3f\u0d38\u0d02\u0d2c\u0d30\u0d4d"],SHORTMONTHS:["\u0d1c\u0d28\u0d41","\u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41","\u0d2e\u0d3e\u0d30\u0d4d","\u0d0f\u0d2a\u0d4d\u0d30\u0d3f","\u0d2e\u0d47\u0d2f\u0d4d","\u0d1c\u0d42\u0d23\u0d4d","\u0d1c\u0d42\u0d32\u0d48","\u0d13\u0d17","\u0d38\u0d46\u0d2a\u0d4d\u0d31\u0d4d\u0d31\u0d02","\u0d12\u0d15\u0d4d\u0d1f\u0d4b",
"\u0d28\u0d35\u0d02","\u0d21\u0d3f\u0d38\u0d02"],STANDALONESHORTMONTHS:["\u0d1c\u0d28\u0d41","\u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41","\u0d2e\u0d3e\u0d30\u0d4d","\u0d0f\u0d2a\u0d4d\u0d30\u0d3f","\u0d2e\u0d47\u0d2f\u0d4d","\u0d1c\u0d42\u0d23\u0d4d","\u0d1c\u0d42\u0d32\u0d48","\u0d13\u0d17","\u0d38\u0d46\u0d2a\u0d4d\u0d31\u0d4d\u0d31\u0d02","\u0d12\u0d15\u0d4d\u0d1f\u0d4b","\u0d28\u0d35\u0d02","\u0d21\u0d3f\u0d38\u0d02"],WEEKDAYS:["\u0d1e\u0d3e\u0d2f\u0d31\u0d3e\u0d34\u0d4d\u0d1a","\u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d33\u0d3e\u0d34\u0d4d\u0d1a",
"\u0d1a\u0d4a\u0d35\u0d4d\u0d35\u0d3e\u0d34\u0d4d\u0d1a","\u0d2c\u0d41\u0d27\u0d28\u0d3e\u0d34\u0d4d\u0d1a","\u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d3e\u0d34\u0d4d\u0d1a","\u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f\u0d2f\u0d3e\u0d34\u0d4d\u0d1a","\u0d36\u0d28\u0d3f\u0d2f\u0d3e\u0d34\u0d4d\u0d1a"],STANDALONEWEEKDAYS:["\u0d1e\u0d3e\u0d2f\u0d31\u0d3e\u0d34\u0d4d\u0d1a","\u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d33\u0d3e\u0d34\u0d4d\u0d1a","\u0d1a\u0d4a\u0d35\u0d4d\u0d35\u0d3e\u0d34\u0d4d\u0d1a","\u0d2c\u0d41\u0d27\u0d28\u0d3e\u0d34\u0d4d\u0d1a",
"\u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d3e\u0d34\u0d4d\u0d1a","\u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f\u0d2f\u0d3e\u0d34\u0d4d\u0d1a","\u0d36\u0d28\u0d3f\u0d2f\u0d3e\u0d34\u0d4d\u0d1a"],SHORTWEEKDAYS:["\u0d1e\u0d3e\u0d2f\u0d30\u0d4d","\u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d33\u0d4d","\u0d1a\u0d4a\u0d35\u0d4d\u0d35","\u0d2c\u0d41\u0d27\u0d28\u0d4d","\u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d02","\u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f","\u0d36\u0d28\u0d3f"],STANDALONESHORTWEEKDAYS:["\u0d1e\u0d3e\u0d2f\u0d30\u0d4d","\u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d33\u0d4d",
"\u0d1a\u0d4a\u0d35\u0d4d\u0d35","\u0d2c\u0d41\u0d27\u0d28\u0d4d","\u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d02","\u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f","\u0d36\u0d28\u0d3f"],NARROWWEEKDAYS:["\u0d1e\u0d3e","\u0d24\u0d3f","\u0d1a\u0d4a","\u0d2c\u0d41","\u0d35\u0d4d\u0d2f\u0d3e","\u0d35\u0d46","\u0d36"],STANDALONENARROWWEEKDAYS:["\u0d1e\u0d3e","\u0d24\u0d3f","\u0d1a\u0d4a","\u0d2c\u0d41","\u0d35\u0d4d\u0d2f\u0d3e","\u0d35\u0d46","\u0d36"],SHORTQUARTERS:["Q1","Q2","Q3","Q4"],QUARTERS:["\u0d12\u0d28\u0d4d\u0d28\u0d3e\u0d02 \u0d2a\u0d3e\u0d26\u0d02",
"\u0d30\u0d23\u0d4d\u0d1f\u0d3e\u0d02 \u0d2a\u0d3e\u0d26\u0d02","\u0d2e\u0d42\u0d28\u0d4d\u0d28\u0d3e\u0d02 \u0d2a\u0d3e\u0d26\u0d02","\u0d28\u0d3e\u0d32\u0d3e\u0d02 \u0d2a\u0d3e\u0d26\u0d02"],AMPMS:["am","pm"],DATEFORMATS:["y, MMMM d, EEEE","y, MMMM d","y, MMM d","dd/MM/yy"],TIMEFORMATS:["h:mm:ss a zzzz","h:mm:ss a z","h:mm:ss a","h:mm a"],AVAILABLEFORMATS:{Md:"d/M",MMMMd:"MMMM d",MMMd:"MMM d"},FIRSTDAYOFWEEK:6,WEEKENDRANGE:[6,6],FIRSTWEEKCUTOFFDAY:2};
goog.i18n.DateTimeSymbols_mo={ERAS:["\u00ee.Hr.","d.Hr."],ERANAMES:["\u00eenainte de Hristos","dup\u0103 Hristos"],NARROWMONTHS:["I","F","M","A","M","I","I","A","S","O","N","D"],STANDALONENARROWMONTHS:["I","F","M","A","M","I","I","A","S","O","N","D"],MONTHS:["ianuarie","februarie","martie","aprilie","mai","iunie","iulie","august","septembrie","octombrie","noiembrie","decembrie"],STANDALONEMONTHS:["ianuarie","februarie","martie","aprilie","mai","iunie","iulie","august","septembrie","octombrie","noiembrie",
"decembrie"],SHORTMONTHS:["ian.","feb.","mar.","apr.","mai","iun.","iul.","aug.","sept.","oct.","nov.","dec."],STANDALONESHORTMONTHS:["ian.","feb.","mar.","apr.","mai","iun.","iul.","aug.","sept.","oct.","nov.","dec."],WEEKDAYS:["duminic\u0103","luni","mar\u021bi","miercuri","joi","vineri","s\u00e2mb\u0103t\u0103"],STANDALONEWEEKDAYS:["duminic\u0103","luni","mar\u021bi","miercuri","joi","vineri","s\u00e2mb\u0103t\u0103"],SHORTWEEKDAYS:["Du","Lu","Ma","Mi","Jo","Vi","S\u00e2"],STANDALONESHORTWEEKDAYS:["Du",
"Lu","Ma","Mi","Jo","Vi","S\u00e2"],NARROWWEEKDAYS:["D","L","M","M","J","V","S"],STANDALONENARROWWEEKDAYS:["D","L","M","M","J","V","S"],SHORTQUARTERS:["trim. I","trim. II","trim. III","trim. IV"],QUARTERS:["trimestrul I","trimestrul al II-lea","trimestrul al III-lea","trimestrul al IV-lea"],AMPMS:["AM","PM"],DATEFORMATS:["EEEE, d MMMM y","d MMMM y","dd.MM.yyyy","dd.MM.yyyy"],TIMEFORMATS:["HH:mm:ss zzzz","HH:mm:ss z","HH:mm:ss","HH:mm"],AVAILABLEFORMATS:{Md:"d.M",MMMMd:"d MMMM",MMMd:"d MMM"},FIRSTDAYOFWEEK:0,
WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_mr={ERAS:["\u0908.\u0938.\u092a\u0942.","\u0908.\u0938."],ERANAMES:["\u0908\u0938\u0935\u0940\u0938\u0928\u092a\u0942\u0930\u094d\u0935","\u0908\u0938\u0935\u0940\u0938\u0928"],NARROWMONTHS:["\u091c\u093e","\u092b\u0947","\u092e\u093e","\u090f","\u092e\u0947","\u091c\u0942","\u091c\u0941","\u0911","\u0938","\u0911","\u0928\u094b","\u0921\u093f"],STANDALONENARROWMONTHS:["\u091c\u093e","\u092b\u0947","\u092e\u093e","\u090f","\u092e\u0947","\u091c\u0942","\u091c\u0941","\u0911",
"\u0938","\u0911","\u0928\u094b","\u0921\u093f"],MONTHS:["\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940","\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940","\u092e\u093e\u0930\u094d\u091a","\u090f\u092a\u094d\u0930\u093f\u0932","\u092e\u0947","\u091c\u0942\u0928","\u091c\u0941\u0932\u0948","\u0911\u0917\u0938\u094d\u091f","\u0938\u092a\u094d\u091f\u0947\u0902\u092c\u0930","\u0911\u0915\u094d\u091f\u094b\u092c\u0930","\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930","\u0921\u093f\u0938\u0947\u0902\u092c\u0930"],
STANDALONEMONTHS:["\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940","\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940","\u092e\u093e\u0930\u094d\u091a","\u090f\u092a\u094d\u0930\u093f\u0932","\u092e\u0947","\u091c\u0942\u0928","\u091c\u0941\u0932\u0948","\u0911\u0917\u0938\u094d\u091f","\u0938\u092a\u094d\u091f\u0947\u0902\u092c\u0930","\u0911\u0915\u094d\u091f\u094b\u092c\u0930","\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930","\u0921\u093f\u0938\u0947\u0902\u092c\u0930"],SHORTMONTHS:["\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940",
"\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940","\u092e\u093e\u0930\u094d\u091a","\u090f\u092a\u094d\u0930\u093f\u0932","\u092e\u0947","\u091c\u0942\u0928","\u091c\u0941\u0932\u0948","\u0911\u0917\u0938\u094d\u091f","\u0938\u092a\u094d\u091f\u0947\u0902\u092c\u0930","\u0911\u0915\u094d\u091f\u094b\u092c\u0930","\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930","\u0921\u093f\u0938\u0947\u0902\u092c\u0930"],STANDALONESHORTMONTHS:["\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940",
"\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940","\u092e\u093e\u0930\u094d\u091a","\u090f\u092a\u094d\u0930\u093f\u0932","\u092e\u0947","\u091c\u0942\u0928","\u091c\u0941\u0932\u0948","\u0911\u0917\u0938\u094d\u091f","\u0938\u092a\u094d\u091f\u0947\u0902\u092c\u0930","\u0911\u0915\u094d\u091f\u094b\u092c\u0930","\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930","\u0921\u093f\u0938\u0947\u0902\u092c\u0930"],WEEKDAYS:["\u0930\u0935\u093f\u0935\u093e\u0930","\u0938\u094b\u092e\u0935\u093e\u0930",
"\u092e\u0902\u0917\u0933\u0935\u093e\u0930","\u092c\u0941\u0927\u0935\u093e\u0930","\u0917\u0941\u0930\u0941\u0935\u093e\u0930","\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930","\u0936\u0928\u093f\u0935\u093e\u0930"],STANDALONEWEEKDAYS:["\u0930\u0935\u093f\u0935\u093e\u0930","\u0938\u094b\u092e\u0935\u093e\u0930","\u092e\u0902\u0917\u0933\u0935\u093e\u0930","\u092c\u0941\u0927\u0935\u093e\u0930","\u0917\u0941\u0930\u0941\u0935\u093e\u0930","\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930","\u0936\u0928\u093f\u0935\u093e\u0930"],
SHORTWEEKDAYS:["\u0930\u0935\u093f","\u0938\u094b\u092e","\u092e\u0902\u0917\u0933","\u092c\u0941\u0927","\u0917\u0941\u0930\u0941","\u0936\u0941\u0915\u094d\u0930","\u0936\u0928\u093f"],STANDALONESHORTWEEKDAYS:["\u0930\u0935\u093f","\u0938\u094b\u092e","\u092e\u0902\u0917\u0933","\u092c\u0941\u0927","\u0917\u0941\u0930\u0941","\u0936\u0941\u0915\u094d\u0930","\u0936\u0928\u093f"],NARROWWEEKDAYS:["\u0930","\u0938\u094b","\u092e\u0902","\u092c\u0941","\u0917\u0941","\u0936\u0941","\u0936"],STANDALONENARROWWEEKDAYS:["\u0930",
"\u0938\u094b","\u092e\u0902","\u092c\u0941","\u0917\u0941","\u0936\u0941","\u0936"],SHORTQUARTERS:["Q1","Q2","Q3","Q4"],QUARTERS:["\u092a\u094d\u0930\u0925\u092e \u0924\u093f\u092e\u093e\u0939\u0940","\u0926\u094d\u0935\u093f\u0924\u0940\u092f \u0924\u093f\u092e\u093e\u0939\u0940","\u0924\u0943\u0924\u0940\u092f \u0924\u093f\u092e\u093e\u0939\u0940","\u091a\u0924\u0941\u0930\u094d\u0925 \u0924\u093f\u092e\u093e\u0939\u0940"],AMPMS:["am","pm"],DATEFORMATS:["EEEE d MMMM y","d MMMM y","d MMM y","d-M-yy"],
TIMEFORMATS:["h-mm-ss a zzzz","h-mm-ss a z","h-mm-ss a","h-mm a"],AVAILABLEFORMATS:{Md:"M-d",MMMMd:"d MMMM",MMMd:"MMM d"},FIRSTDAYOFWEEK:6,WEEKENDRANGE:[6,6],FIRSTWEEKCUTOFFDAY:2};
goog.i18n.DateTimeSymbols_ms={ERAS:["S.M.","T.M."],ERANAMES:["S.M.","T.M."],NARROWMONTHS:["1","2","3","4","5","6","7","8","9","10","11","12"],STANDALONENARROWMONTHS:["1","2","3","4","5","6","7","8","9","10","11","12"],MONTHS:["Januari","Februari","Mac","April","Mei","Jun","Julai","Ogos","September","Oktober","November","Disember"],STANDALONEMONTHS:["Januari","Februari","Mac","April","Mei","Jun","Julai","Ogos","September","Oktober","November","Disember"],SHORTMONTHS:["Jan","Feb","Mac","Apr","Mei",
"Jun","Jul","Ogos","Sep","Okt","Nov","Dis"],STANDALONESHORTMONTHS:["Jan","Feb","Mac","Apr","Mei","Jun","Jul","Ogos","Sep","Okt","Nov","Dis"],WEEKDAYS:["Ahad","Isnin","Selasa","Rabu","Khamis","Jumaat","Sabtu"],STANDALONEWEEKDAYS:["Ahad","Isnin","Selasa","Rabu","Khamis","Jumaat","Sabtu"],SHORTWEEKDAYS:["Ahd","Isn","Sel","Rab","Kha","Jum","Sab"],STANDALONESHORTWEEKDAYS:["Ahd","Isn","Sel","Rab","Kha","Jum","Sab"],NARROWWEEKDAYS:["1","2","3","4","5","6","7"],STANDALONENARROWWEEKDAYS:["1","2","3","4","5",
"6","7"],SHORTQUARTERS:["S1","S2","S3","S4"],QUARTERS:["suku pertama","suku kedua","suku ketiga","suku keempat"],AMPMS:["AM","PM"],DATEFORMATS:["EEEE dd MMM y","dd MMMM y","dd MMM y","dd/MM/yyyy"],TIMEFORMATS:["h:mm:ss a zzzz","h:mm:ss a z","h:mm:ss a","h:mm"],AVAILABLEFORMATS:{Md:"M-d",MMMMd:"MMMM d",MMMd:"MMM d"},FIRSTDAYOFWEEK:0,WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_mt={ERAS:["QK","WK"],ERANAMES:["Qabel Kristu","Wara Kristu"],NARROWMONTHS:["J","F","M","A","M","\u0120","L","A","S","O","N","D"],STANDALONENARROWMONTHS:["J","F","M","A","M","\u0120","L","A","S","O","N","D"],MONTHS:["Jannar","Frar","Marzu","April","Mejju","\u0120unju","Lulju","Awwissu","Settembru","Ottubru","Novembru","Di\u010bembru"],STANDALONEMONTHS:["Jannar","Frar","Marzu","April","Mejju","\u0120unju","Lulju","Awwissu","Settembru","Ottubru","Novembru","Di\u010bembru"],
SHORTMONTHS:["Jan","Fra","Mar","Apr","Mej","\u0120un","Lul","Aww","Set","Ott","Nov","Di\u010b"],STANDALONESHORTMONTHS:["Jan","Fra","Mar","Apr","Mej","\u0120un","Lul","Aww","Set","Ott","Nov","Di\u010b"],WEEKDAYS:["Il-\u0126add","It-Tnejn","It-Tlieta","L-Erbg\u0127a","Il-\u0126amis","Il-\u0120img\u0127a","Is-Sibt"],STANDALONEWEEKDAYS:["Il-\u0126add","It-Tnejn","It-Tlieta","L-Erbg\u0127a","Il-\u0126amis","Il-\u0120img\u0127a","Is-Sibt"],SHORTWEEKDAYS:["\u0126ad","Tne","Tli","Erb","\u0126am","\u0120im",
"Sib"],STANDALONESHORTWEEKDAYS:["\u0126ad","Tne","Tli","Erb","\u0126am","\u0120im","Sib"],NARROWWEEKDAYS:["\u0126","T","T","E","\u0126","\u0120","S"],STANDALONENARROWWEEKDAYS:["\u0126","T","T","E","\u0126","\u0120","S"],SHORTQUARTERS:["K1","K2","K3","K4"],QUARTERS:["K1","K2","K3","K4"],AMPMS:["QN","WN"],DATEFORMATS:["EEEE, d 'ta'\u2019 MMMM y","d 'ta'\u2019 MMMM y","dd MMM y","dd/MM/yyyy"],TIMEFORMATS:["HH:mm:ss zzzz","HH:mm:ss z","HH:mm:ss","HH:mm"],AVAILABLEFORMATS:{Md:"M-d",MMMMd:"d 'ta'\u2019 MMMM",
MMMd:"MMM d"},FIRSTDAYOFWEEK:6,WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:2};
goog.i18n.DateTimeSymbols_nl={ERAS:["v. Chr.","n. Chr."],ERANAMES:["Voor Christus","Anno Domini"],NARROWMONTHS:["J","F","M","A","M","J","J","A","S","O","N","D"],STANDALONENARROWMONTHS:["J","F","M","A","M","J","J","A","S","O","N","D"],MONTHS:["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],STANDALONEMONTHS:["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],SHORTMONTHS:["jan.",
"feb.","mrt.","apr.","mei","jun.","jul.","aug.","sep.","okt.","nov.","dec."],STANDALONESHORTMONTHS:["jan.","feb.","mrt.","apr.","mei","jun.","jul.","aug.","sep.","okt.","nov.","dec."],WEEKDAYS:["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],STANDALONEWEEKDAYS:["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],SHORTWEEKDAYS:["zo","ma","di","wo","do","vr","za"],STANDALONESHORTWEEKDAYS:["zo","ma","di","wo","do","vr","za"],NARROWWEEKDAYS:["Z","M","D",
"W","D","V","Z"],STANDALONENARROWWEEKDAYS:["Z","M","D","W","D","V","Z"],SHORTQUARTERS:["K1","K2","K3","K4"],QUARTERS:["1e kwartaal","2e kwartaal","3e kwartaal","4e kwartaal"],AMPMS:["AM","PM"],DATEFORMATS:["EEEE d MMMM y","d MMMM y","d MMM y","dd-MM-yy"],TIMEFORMATS:["HH:mm:ss zzzz","HH:mm:ss z","HH:mm:ss","HH:mm"],AVAILABLEFORMATS:{Md:"d-M",MMMMd:"d MMMM",MMMd:"d-MMM"},FIRSTDAYOFWEEK:0,WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_no={ERAS:["f.Kr.","e.Kr."],ERANAMES:["f.Kr.","e.Kr."],NARROWMONTHS:["J","F","M","A","M","J","J","A","S","O","N","D"],STANDALONENARROWMONTHS:["J","F","M","A","M","J","J","A","S","O","N","D"],MONTHS:["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],STANDALONEMONTHS:["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],SHORTMONTHS:["jan.","feb.","mars","apr.","mai",
"juni","juli","aug.","sep.","okt.","nov.","des."],STANDALONESHORTMONTHS:["jan.","feb.","mars","apr.","mai","juni","juli","aug.","sep.","okt.","nov.","des."],WEEKDAYS:["s\u00f8ndag","mandag","tirsdag","onsdag","torsdag","fredag","l\u00f8rdag"],STANDALONEWEEKDAYS:["s\u00f8ndag","mandag","tirsdag","onsdag","torsdag","fredag","l\u00f8rdag"],SHORTWEEKDAYS:["s\u00f8n.","man.","tir.","ons.","tor.","fre.","l\u00f8r."],STANDALONESHORTWEEKDAYS:["s\u00f8n.","man.","tir.","ons.","tor.","fre.","l\u00f8r."],NARROWWEEKDAYS:["S",
"M","T","O","T","F","L"],STANDALONENARROWWEEKDAYS:["S","M","T","O","T","F","L"],SHORTQUARTERS:["K1","K2","K3","K4"],QUARTERS:["1. kvartal","2. kvartal","3. kvartal","4. kvartal"],AMPMS:["AM","PM"],DATEFORMATS:["EEEE d. MMMM y","d. MMMM y","d. MMM y","dd.MM.yy"],TIMEFORMATS:["'kl'. HH.mm.ss zzzz","HH.mm.ss z","HH.mm.ss","HH.mm"],AVAILABLEFORMATS:{Md:"d.M.",MMMMd:"d. MMMM",MMMd:"d. MMM"},FIRSTDAYOFWEEK:0,WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_or={ERAS:["BCE","CE"],ERANAMES:["BCE","CE"],NARROWMONTHS:["\u0b1c\u0b3e","\u0b2b\u0b47","\u0b2e\u0b3e","\u0b05","\u0b2e\u0b47","\u0b1c\u0b41","\u0b1c\u0b41","\u0b05","\u0b38\u0b47","\u0b05","\u0b28","\u0b21\u0b3f"],STANDALONENARROWMONTHS:["\u0b1c\u0b3e","\u0b2b\u0b47","\u0b2e\u0b3e","\u0b05","\u0b2e\u0b47","\u0b1c\u0b41","\u0b1c\u0b41","\u0b05","\u0b38\u0b47","\u0b05","\u0b28","\u0b21\u0b3f"],MONTHS:["\u0b1c\u0b3e\u0b28\u0b41\u0b06\u0b30\u0b40","\u0b2b\u0b47\u0b2c\u0b4d\u0b30\u0b41\u0b5f\u0b3e\u0b30\u0b40",
"\u0b2e\u0b3e\u0b30\u0b4d\u0b1a\u0b4d\u0b1a","\u0b05\u0b2a\u0b4d\u0b30\u0b47\u0b32","\u0b2e\u0b47","\u0b1c\u0b41\u0b28","\u0b1c\u0b41\u0b32\u0b3e\u0b07","\u0b05\u0b17\u0b37\u0b4d\u0b1f","\u0b38\u0b47\u0b2a\u0b4d\u0b1f\u0b47\u0b2e\u0b4d\u0b2c\u0b30","\u0b05\u0b15\u0b4d\u0b1f\u0b4b\u0b2c\u0b30","\u0b28\u0b2d\u0b47\u0b2e\u0b4d\u0b2c\u0b30","\u0b21\u0b3f\u0b38\u0b47\u0b2e\u0b4d\u0b2c\u0b30"],STANDALONEMONTHS:["\u0b1c\u0b3e\u0b28\u0b41\u0b06\u0b30\u0b40","\u0b2b\u0b47\u0b2c\u0b4d\u0b30\u0b41\u0b5f\u0b3e\u0b30\u0b40",
"\u0b2e\u0b3e\u0b30\u0b4d\u0b1a\u0b4d\u0b1a","\u0b05\u0b2a\u0b4d\u0b30\u0b47\u0b32","\u0b2e\u0b47","\u0b1c\u0b41\u0b28","\u0b1c\u0b41\u0b32\u0b3e\u0b07","\u0b05\u0b17\u0b37\u0b4d\u0b1f","\u0b38\u0b47\u0b2a\u0b4d\u0b1f\u0b47\u0b2e\u0b4d\u0b2c\u0b30","\u0b05\u0b15\u0b4d\u0b1f\u0b4b\u0b2c\u0b30","\u0b28\u0b2d\u0b47\u0b2e\u0b4d\u0b2c\u0b30","\u0b21\u0b3f\u0b38\u0b47\u0b2e\u0b4d\u0b2c\u0b30"],SHORTMONTHS:["\u0b1c\u0b3e\u0b28\u0b41\u0b06\u0b30\u0b40","\u0b2b\u0b47\u0b2c\u0b4d\u0b30\u0b41\u0b5f\u0b3e\u0b30\u0b40",
"\u0b2e\u0b3e\u0b30\u0b4d\u0b1a\u0b4d\u0b1a","\u0b05\u0b2a\u0b4d\u0b30\u0b47\u0b32","\u0b2e\u0b47","\u0b1c\u0b41\u0b28","\u0b1c\u0b41\u0b32\u0b3e\u0b07","\u0b05\u0b17\u0b37\u0b4d\u0b1f","\u0b38\u0b47\u0b2a\u0b4d\u0b1f\u0b47\u0b2e\u0b4d\u0b2c\u0b30","\u0b05\u0b15\u0b4d\u0b1f\u0b4b\u0b2c\u0b30","\u0b28\u0b2d\u0b47\u0b2e\u0b4d\u0b2c\u0b30","\u0b21\u0b3f\u0b38\u0b47\u0b2e\u0b4d\u0b2c\u0b30"],STANDALONESHORTMONTHS:["\u0b1c\u0b3e\u0b28\u0b41\u0b06\u0b30\u0b40","\u0b2b\u0b47\u0b2c\u0b4d\u0b30\u0b41\u0b5f\u0b3e\u0b30\u0b40",
"\u0b2e\u0b3e\u0b30\u0b4d\u0b1a\u0b4d\u0b1a","\u0b05\u0b2a\u0b4d\u0b30\u0b47\u0b32","\u0b2e\u0b47","\u0b1c\u0b41\u0b28","\u0b1c\u0b41\u0b32\u0b3e\u0b07","\u0b05\u0b17\u0b37\u0b4d\u0b1f","\u0b38\u0b47\u0b2a\u0b4d\u0b1f\u0b47\u0b2e\u0b4d\u0b2c\u0b30","\u0b05\u0b15\u0b4d\u0b1f\u0b4b\u0b2c\u0b30","\u0b28\u0b2d\u0b47\u0b2e\u0b4d\u0b2c\u0b30","\u0b21\u0b3f\u0b38\u0b47\u0b2e\u0b4d\u0b2c\u0b30"],WEEKDAYS:["\u0b30\u0b2c\u0b3f\u0b2c\u0b3e\u0b30","\u0b38\u0b4b\u0b2e\u0b2c\u0b3e\u0b30","\u0b2e\u0b19\u0b4d\u0b17\u0b33\u0b2c\u0b3e\u0b30",
"\u0b2c\u0b41\u0b27\u0b2c\u0b3e\u0b30","\u0b17\u0b41\u0b30\u0b41\u0b2c\u0b3e\u0b30","\u0b36\u0b41\u0b15\u0b4d\u0b30\u0b2c\u0b3e\u0b30","\u0b36\u0b28\u0b3f\u0b2c\u0b3e\u0b30"],STANDALONEWEEKDAYS:["\u0b30\u0b2c\u0b3f\u0b2c\u0b3e\u0b30","\u0b38\u0b4b\u0b2e\u0b2c\u0b3e\u0b30","\u0b2e\u0b19\u0b4d\u0b17\u0b33\u0b2c\u0b3e\u0b30","\u0b2c\u0b41\u0b27\u0b2c\u0b3e\u0b30","\u0b17\u0b41\u0b30\u0b41\u0b2c\u0b3e\u0b30","\u0b36\u0b41\u0b15\u0b4d\u0b30\u0b2c\u0b3e\u0b30","\u0b36\u0b28\u0b3f\u0b2c\u0b3e\u0b30"],SHORTWEEKDAYS:["\u0b30\u0b2c\u0b3f",
"\u0b38\u0b4b\u0b2e","\u0b2e\u0b19\u0b4d\u0b17\u0b33","\u0b2c\u0b41\u0b27","\u0b17\u0b41\u0b30\u0b41","\u0b36\u0b41\u0b15\u0b4d\u0b30","\u0b36\u0b28\u0b3f"],STANDALONESHORTWEEKDAYS:["\u0b30\u0b2c\u0b3f","\u0b38\u0b4b\u0b2e","\u0b2e\u0b19\u0b4d\u0b17\u0b33","\u0b2c\u0b41\u0b27","\u0b17\u0b41\u0b30\u0b41","\u0b36\u0b41\u0b15\u0b4d\u0b30","\u0b36\u0b28\u0b3f"],NARROWWEEKDAYS:["\u0b30","\u0b38\u0b4b","\u0b2e","\u0b2c\u0b41","\u0b17\u0b41","\u0b36\u0b41","\u0b36"],STANDALONENARROWWEEKDAYS:["\u0b30","\u0b38\u0b4b",
"\u0b2e","\u0b2c\u0b41","\u0b17\u0b41","\u0b36\u0b41","\u0b36"],SHORTQUARTERS:["Q1","Q2","Q3","Q4"],QUARTERS:["Q1","Q2","Q3","Q4"],AMPMS:["am","pm"],DATEFORMATS:["EEEE, d MMMM y","d MMMM y","d MMM y","d-M-yy"],TIMEFORMATS:["h:mm:ss a zzzz","h:mm:ss a z","h:mm:ss a","h:mm a"],AVAILABLEFORMATS:{Md:"M-d",MMMMd:"MMMM d",MMMd:"MMM d"},FIRSTDAYOFWEEK:6,WEEKENDRANGE:[6,6],FIRSTWEEKCUTOFFDAY:2};
goog.i18n.DateTimeSymbols_pl={ERAS:["p.n.e.","n.e."],ERANAMES:["p.n.e.","n.e."],NARROWMONTHS:["s","l","m","k","m","c","l","s","w","p","l","g"],STANDALONENARROWMONTHS:["s","l","m","k","m","c","l","s","w","p","l","g"],MONTHS:["stycznia","lutego","marca","kwietnia","maja","czerwca","lipca","sierpnia","wrze\u015bnia","pa\u017adziernika","listopada","grudnia"],STANDALONEMONTHS:["stycze\u0144","luty","marzec","kwiecie\u0144","maj","czerwiec","lipiec","sierpie\u0144","wrzesie\u0144","pa\u017adziernik","listopad",
"grudzie\u0144"],SHORTMONTHS:["sty","lut","mar","kwi","maj","cze","lip","sie","wrz","pa\u017a","lis","gru"],STANDALONESHORTMONTHS:["sty","lut","mar","kwi","maj","cze","lip","sie","wrz","pa\u017a","lis","gru"],WEEKDAYS:["niedziela","poniedzia\u0142ek","wtorek","\u015broda","czwartek","pi\u0105tek","sobota"],STANDALONEWEEKDAYS:["niedziela","poniedzia\u0142ek","wtorek","\u015broda","czwartek","pi\u0105tek","sobota"],SHORTWEEKDAYS:["niedz.","pon.","wt.","\u015br.","czw.","pt.","sob."],STANDALONESHORTWEEKDAYS:["niedz.",
"pon.","wt.","\u015br.","czw.","pt.","sob."],NARROWWEEKDAYS:["N","P","W","\u015a","C","P","S"],STANDALONENARROWWEEKDAYS:["N","P","W","\u015a","C","P","S"],SHORTQUARTERS:["K1","K2","K3","K4"],QUARTERS:["I kwarta\u0142","II kwarta\u0142","III kwarta\u0142","IV kwarta\u0142"],AMPMS:["AM","PM"],DATEFORMATS:["EEEE, d MMMM y","d MMMM y","dd-MM-yyyy","dd-MM-yy"],TIMEFORMATS:["HH:mm:ss zzzz","HH:mm:ss z","HH:mm:ss","HH:mm"],AVAILABLEFORMATS:{Md:"d.M",MMMMd:"d MMMM",MMMd:"MMM d"},FIRSTDAYOFWEEK:0,WEEKENDRANGE:[5,
6],FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_pt={ERAS:["a.C.","d.C."],ERANAMES:["Antes de Cristo","Ano do Senhor"],NARROWMONTHS:["J","F","M","A","M","J","J","A","S","O","N","D"],STANDALONENARROWMONTHS:["J","F","M","A","M","J","J","A","S","O","N","D"],MONTHS:["janeiro","fevereiro","mar\u00e7o","abril","maio","junho","julho","agosto","setembro","outubro","novembro","dezembro"],STANDALONEMONTHS:["janeiro","fevereiro","mar\u00e7o","abril","maio","junho","julho","agosto","setembro","outubro","novembro","dezembro"],SHORTMONTHS:["jan",
"fev","mar","abr","mai","jun","jul","ago","set","out","nov","dez"],STANDALONESHORTMONTHS:["jan","fev","mar","abr","mai","jun","jul","ago","set","out","nov","dez"],WEEKDAYS:["domingo","segunda-feira","ter\u00e7a-feira","quarta-feira","quinta-feira","sexta-feira","s\u00e1bado"],STANDALONEWEEKDAYS:["domingo","segunda-feira","ter\u00e7a-feira","quarta-feira","quinta-feira","sexta-feira","s\u00e1bado"],SHORTWEEKDAYS:["dom","seg","ter","qua","qui","sex","s\u00e1b"],STANDALONESHORTWEEKDAYS:["dom","seg",
"ter","qua","qui","sex","s\u00e1b"],NARROWWEEKDAYS:["D","S","T","Q","Q","S","S"],STANDALONENARROWWEEKDAYS:["D","S","T","Q","Q","S","S"],SHORTQUARTERS:["T1","T2","T3","T4"],QUARTERS:["1\u00ba trimestre","2\u00ba trimestre","3\u00ba trimestre","4\u00ba trimestre"],AMPMS:["AM","PM"],DATEFORMATS:["EEEE, d 'de' MMMM 'de' y","d 'de' MMMM 'de' y","dd/MM/yyyy","dd/MM/yy"],TIMEFORMATS:["HH'h'mm'min'ss's' zzzz","HH'h'mm'min'ss's' z","HH:mm:ss","HH:mm"],AVAILABLEFORMATS:{Md:"d/M",MMMMd:"d 'de' MMMM",MMMd:"d 'de' MMM"},
FIRSTDAYOFWEEK:0,WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:3};goog.i18n.DateTimeSymbols_pt_BR=goog.i18n.DateTimeSymbols_pt;
goog.i18n.DateTimeSymbols_pt_PT={ERAS:["a.C.","d.C."],ERANAMES:["Antes de Cristo","Ano do Senhor"],NARROWMONTHS:["J","F","M","A","M","J","J","A","S","O","N","D"],STANDALONENARROWMONTHS:["J","F","M","A","M","J","J","A","S","O","N","D"],MONTHS:["Janeiro","Fevereiro","Mar\u00e7o","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],STANDALONEMONTHS:["Janeiro","Fevereiro","Mar\u00e7o","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],SHORTMONTHS:["Jan",
"Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],STANDALONESHORTMONTHS:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],WEEKDAYS:["domingo","segunda-feira","ter\u00e7a-feira","quarta-feira","quinta-feira","sexta-feira","s\u00e1bado"],STANDALONEWEEKDAYS:["domingo","segunda-feira","ter\u00e7a-feira","quarta-feira","quinta-feira","sexta-feira","s\u00e1bado"],SHORTWEEKDAYS:["dom","seg","ter","qua","qui","sex","s\u00e1b"],STANDALONESHORTWEEKDAYS:["dom","seg",
"ter","qua","qui","sex","s\u00e1b"],NARROWWEEKDAYS:["D","S","T","Q","Q","S","S"],STANDALONENARROWWEEKDAYS:["D","S","T","Q","Q","S","S"],SHORTQUARTERS:["T1","T2","T3","T4"],QUARTERS:["1.\u00ba trimestre","2.\u00ba trimestre","3.\u00ba trimestre","4.\u00ba trimestre"],AMPMS:["Antes do meio-dia","Depois do meio-dia"],DATEFORMATS:["EEEE, d 'de' MMMM 'de' y","d 'de' MMMM 'de' y","d 'de' MMM 'de' yyyy","dd/MM/yy"],TIMEFORMATS:["HH'h'mm'min'ss's' zzzz","HH'h'mm'min'ss's' z","HH:mm:ss","HH:mm"],AVAILABLEFORMATS:{Md:"d/M",
MMMMd:"d 'de' MMMM",MMMd:"d 'de' MMM"},FIRSTDAYOFWEEK:0,WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_ro={ERAS:["\u00ee.Hr.","d.Hr."],ERANAMES:["\u00eenainte de Hristos","dup\u0103 Hristos"],NARROWMONTHS:["I","F","M","A","M","I","I","A","S","O","N","D"],STANDALONENARROWMONTHS:["I","F","M","A","M","I","I","A","S","O","N","D"],MONTHS:["ianuarie","februarie","martie","aprilie","mai","iunie","iulie","august","septembrie","octombrie","noiembrie","decembrie"],STANDALONEMONTHS:["ianuarie","februarie","martie","aprilie","mai","iunie","iulie","august","septembrie","octombrie","noiembrie",
"decembrie"],SHORTMONTHS:["ian.","feb.","mar.","apr.","mai","iun.","iul.","aug.","sept.","oct.","nov.","dec."],STANDALONESHORTMONTHS:["ian.","feb.","mar.","apr.","mai","iun.","iul.","aug.","sept.","oct.","nov.","dec."],WEEKDAYS:["duminic\u0103","luni","mar\u021bi","miercuri","joi","vineri","s\u00e2mb\u0103t\u0103"],STANDALONEWEEKDAYS:["duminic\u0103","luni","mar\u021bi","miercuri","joi","vineri","s\u00e2mb\u0103t\u0103"],SHORTWEEKDAYS:["Du","Lu","Ma","Mi","Jo","Vi","S\u00e2"],STANDALONESHORTWEEKDAYS:["Du",
"Lu","Ma","Mi","Jo","Vi","S\u00e2"],NARROWWEEKDAYS:["D","L","M","M","J","V","S"],STANDALONENARROWWEEKDAYS:["D","L","M","M","J","V","S"],SHORTQUARTERS:["trim. I","trim. II","trim. III","trim. IV"],QUARTERS:["trimestrul I","trimestrul al II-lea","trimestrul al III-lea","trimestrul al IV-lea"],AMPMS:["AM","PM"],DATEFORMATS:["EEEE, d MMMM y","d MMMM y","dd.MM.yyyy","dd.MM.yyyy"],TIMEFORMATS:["HH:mm:ss zzzz","HH:mm:ss z","HH:mm:ss","HH:mm"],AVAILABLEFORMATS:{Md:"d.M",MMMMd:"d MMMM",MMMd:"d MMM"},FIRSTDAYOFWEEK:0,
WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_ru={ERAS:["\u0434\u043e \u043d.\u044d.","\u043d.\u044d."],ERANAMES:["\u0434\u043e \u043d.\u044d.","\u043d.\u044d."],NARROWMONTHS:["\u042f","\u0424","\u041c","\u0410","\u041c","\u0418","\u0418","\u0410","\u0421","\u041e","\u041d","\u0414"],STANDALONENARROWMONTHS:["\u042f","\u0424","\u041c","\u0410","\u041c","\u0418","\u0418","\u0410","\u0421","\u041e","\u041d","\u0414"],MONTHS:["\u044f\u043d\u0432\u0430\u0440\u044f","\u0444\u0435\u0432\u0440\u0430\u043b\u044f","\u043c\u0430\u0440\u0442\u0430",
"\u0430\u043f\u0440\u0435\u043b\u044f","\u043c\u0430\u044f","\u0438\u044e\u043d\u044f","\u0438\u044e\u043b\u044f","\u0430\u0432\u0433\u0443\u0441\u0442\u0430","\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f","\u043e\u043a\u0442\u044f\u0431\u0440\u044f","\u043d\u043e\u044f\u0431\u0440\u044f","\u0434\u0435\u043a\u0430\u0431\u0440\u044f"],STANDALONEMONTHS:["\u042f\u043d\u0432\u0430\u0440\u044c","\u0424\u0435\u0432\u0440\u0430\u043b\u044c","\u041c\u0430\u0440\u0442","\u0410\u043f\u0440\u0435\u043b\u044c",
"\u041c\u0430\u0439","\u0418\u044e\u043d\u044c","\u0418\u044e\u043b\u044c","\u0410\u0432\u0433\u0443\u0441\u0442","\u0421\u0435\u043d\u0442\u044f\u0431\u0440\u044c","\u041e\u043a\u0442\u044f\u0431\u0440\u044c","\u041d\u043e\u044f\u0431\u0440\u044c","\u0414\u0435\u043a\u0430\u0431\u0440\u044c"],SHORTMONTHS:["\u044f\u043d\u0432.","\u0444\u0435\u0432\u0440.","\u043c\u0430\u0440\u0442\u0430","\u0430\u043f\u0440.","\u043c\u0430\u044f","\u0438\u044e\u043d\u044f","\u0438\u044e\u043b\u044f","\u0430\u0432\u0433.",
"\u0441\u0435\u043d\u0442.","\u043e\u043a\u0442.","\u043d\u043e\u044f\u0431.","\u0434\u0435\u043a."],STANDALONESHORTMONTHS:["\u044f\u043d\u0432.","\u0444\u0435\u0432\u0440.","\u043c\u0430\u0440\u0442","\u0430\u043f\u0440.","\u043c\u0430\u0439","\u0438\u044e\u043d\u044c","\u0438\u044e\u043b\u044c","\u0430\u0432\u0433.","\u0441\u0435\u043d\u0442.","\u043e\u043a\u0442.","\u043d\u043e\u044f\u0431.","\u0434\u0435\u043a."],WEEKDAYS:["\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435","\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a",
"\u0432\u0442\u043e\u0440\u043d\u0438\u043a","\u0441\u0440\u0435\u0434\u0430","\u0447\u0435\u0442\u0432\u0435\u0440\u0433","\u043f\u044f\u0442\u043d\u0438\u0446\u0430","\u0441\u0443\u0431\u0431\u043e\u0442\u0430"],STANDALONEWEEKDAYS:["\u0412\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435","\u041f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a","\u0412\u0442\u043e\u0440\u043d\u0438\u043a","\u0421\u0440\u0435\u0434\u0430","\u0427\u0435\u0442\u0432\u0435\u0440\u0433","\u041f\u044f\u0442\u043d\u0438\u0446\u0430",
"\u0421\u0443\u0431\u0431\u043e\u0442\u0430"],SHORTWEEKDAYS:["\u0412\u0441","\u041f\u043d","\u0412\u0442","\u0421\u0440","\u0427\u0442","\u041f\u0442","\u0421\u0431"],STANDALONESHORTWEEKDAYS:["\u0412\u0441","\u041f\u043d","\u0412\u0442","\u0421\u0440","\u0427\u0442","\u041f\u0442","\u0421\u0431"],NARROWWEEKDAYS:["\u0412","\u041f","\u0412","\u0421","\u0427","\u041f","\u0421"],STANDALONENARROWWEEKDAYS:["\u0412","\u041f","\u0412","\u0421","\u0427","\u041f","\u0421"],SHORTQUARTERS:["1-\u0439 \u043a\u0432.",
"2-\u0439 \u043a\u0432.","3-\u0439 \u043a\u0432.","4-\u0439 \u043a\u0432."],QUARTERS:["1-\u0439 \u043a\u0432\u0430\u0440\u0442\u0430\u043b","2-\u0439 \u043a\u0432\u0430\u0440\u0442\u0430\u043b","3-\u0439 \u043a\u0432\u0430\u0440\u0442\u0430\u043b","4-\u0439 \u043a\u0432\u0430\u0440\u0442\u0430\u043b"],AMPMS:["AM","PM"],DATEFORMATS:["EEEE, d MMMM y '\u0433'.","d MMMM y '\u0433'.","dd.MM.yyyy","dd.MM.yy"],TIMEFORMATS:["H:mm:ss zzzz","H:mm:ss z","H:mm:ss","H:mm"],AVAILABLEFORMATS:{Md:"d.M",MMMMd:"d MMMM",
MMMd:"d MMM"},FIRSTDAYOFWEEK:0,WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_sk={ERAS:["pred n.l.","n.l."],ERANAMES:["pred n.l.","n.l."],NARROWMONTHS:["j","f","m","a","m","j","j","a","s","o","n","d"],STANDALONENARROWMONTHS:["j","f","m","a","m","j","j","a","s","o","n","d"],MONTHS:["janu\u00e1ra","febru\u00e1ra","marca","apr\u00edla","m\u00e1ja","j\u00fana","j\u00fala","augusta","septembra","okt\u00f3bra","novembra","decembra"],STANDALONEMONTHS:["janu\u00e1r","febru\u00e1r","marec","apr\u00edl","m\u00e1j","j\u00fan","j\u00fal","august","september",
"okt\u00f3ber","november","december"],SHORTMONTHS:["jan","feb","mar","apr","m\u00e1j","j\u00fan","j\u00fal","aug","sep","okt","nov","dec"],STANDALONESHORTMONTHS:["jan","feb","mar","apr","m\u00e1j","j\u00fan","j\u00fal","aug","sep","okt","nov","dec"],WEEKDAYS:["nede\u013ea","pondelok","utorok","streda","\u0161tvrtok","piatok","sobota"],STANDALONEWEEKDAYS:["nede\u013ea","pondelok","utorok","streda","\u0161tvrtok","piatok","sobota"],SHORTWEEKDAYS:["ne","po","ut","st","\u0161t","pi","so"],STANDALONESHORTWEEKDAYS:["ne",
"po","ut","st","\u0161t","pi","so"],NARROWWEEKDAYS:["N","P","U","S","\u0160","P","S"],STANDALONENARROWWEEKDAYS:["N","P","U","S","\u0160","P","S"],SHORTQUARTERS:["Q1","Q2","Q3","Q4"],QUARTERS:["1. \u0161tvr\u0165rok","2. \u0161tvr\u0165rok","3. \u0161tvr\u0165rok","4. \u0161tvr\u0165rok"],AMPMS:["dopoludnia","popoludn\u00ed"],DATEFORMATS:["EEEE, d. MMMM y","d. MMMM y","d.M.yyyy","d.M.yyyy"],TIMEFORMATS:["H:mm:ss zzzz","H:mm:ss z","H:mm:ss","H:mm"],AVAILABLEFORMATS:{Md:"d.M.",MMMMd:"d. MMMM",MMMd:"d. MMM"},
FIRSTDAYOFWEEK:0,WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_sl={ERAS:["pr. n. \u0161t.","po Kr."],ERANAMES:["pred na\u0161im \u0161tetjem","na\u0161e \u0161tetje"],NARROWMONTHS:["j","f","m","a","m","j","j","a","s","o","n","d"],STANDALONENARROWMONTHS:["j","f","m","a","m","j","j","a","s","o","n","d"],MONTHS:["januar","februar","marec","april","maj","junij","julij","avgust","september","oktober","november","december"],STANDALONEMONTHS:["januar","februar","marec","april","maj","junij","julij","avgust","september","oktober","november",
"december"],SHORTMONTHS:["jan","feb","mar","apr","maj","jun","jul","avg","sep","okt","nov","dec"],STANDALONESHORTMONTHS:["jan","feb","mar","apr","maj","jun","jul","avg","sep","okt","nov","dec"],WEEKDAYS:["nedelja","ponedeljek","torek","sreda","\u010detrtek","petek","sobota"],STANDALONEWEEKDAYS:["nedelja","ponedeljek","torek","sreda","\u010detrtek","petek","sobota"],SHORTWEEKDAYS:["ned","pon","tor","sre","\u010det","pet","sob"],STANDALONESHORTWEEKDAYS:["ned","pon","tor","sre","\u010det","pet","sob"],
NARROWWEEKDAYS:["n","p","t","s","\u010d","p","s"],STANDALONENARROWWEEKDAYS:["n","p","t","s","\u010d","p","s"],SHORTQUARTERS:["Q1","Q2","Q3","Q4"],QUARTERS:["1. \u010detrtletje","2. \u010detrtletje","3. \u010detrtletje","4. \u010detrtletje"],AMPMS:["dop.","pop."],DATEFORMATS:["EEEE, dd. MMMM y","dd. MMMM y","d. MMM. yyyy","d. MM. yy"],TIMEFORMATS:["H:mm:ss zzzz","HH:mm:ss z","HH:mm:ss","HH:mm"],AVAILABLEFORMATS:{Md:"d. M.",MMMMd:"d. MMMM",MMMd:"MMM d"},FIRSTDAYOFWEEK:0,WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_sq={ERAS:["p.e.r.","n.e.r."],ERANAMES:["p.e.r.","n.e.r."],NARROWMONTHS:["J","S","M","P","M","Q","K","G","S","T","N","D"],STANDALONENARROWMONTHS:["J","S","M","P","M","Q","K","G","S","T","N","D"],MONTHS:["janar","shkurt","mars","prill","maj","qershor","korrik","gusht","shtator","tetor","n\u00ebntor","dhjetor"],STANDALONEMONTHS:["janar","shkurt","mars","prill","maj","qershor","korrik","gusht","shtator","tetor","n\u00ebntor","dhjetor"],SHORTMONTHS:["Jan","Shk","Mar","Pri","Maj",
"Qer","Kor","Gsh","Sht","Tet","N\u00ebn","Dhj"],STANDALONESHORTMONTHS:["Jan","Shk","Mar","Pri","Maj","Qer","Kor","Gsh","Sht","Tet","N\u00ebn","Dhj"],WEEKDAYS:["e diel","e h\u00ebn\u00eb","e mart\u00eb","e m\u00ebrkur\u00eb","e enjte","e premte","e shtun\u00eb"],STANDALONEWEEKDAYS:["e diel","e h\u00ebn\u00eb","e mart\u00eb","e m\u00ebrkur\u00eb","e enjte","e premte","e shtun\u00eb"],SHORTWEEKDAYS:["Die","H\u00ebn","Mar","M\u00ebr","Enj","Pre","Sht"],STANDALONESHORTWEEKDAYS:["Die","H\u00ebn","Mar",
"M\u00ebr","Enj","Pre","Sht"],NARROWWEEKDAYS:["D","H","M","M","E","P","S"],STANDALONENARROWWEEKDAYS:["D","H","M","M","E","P","S"],SHORTQUARTERS:["Q1","Q2","Q3","Q4"],QUARTERS:["Q1","Q2","Q3","Q4"],AMPMS:["PD","MD"],DATEFORMATS:["EEEE, dd MMMM y","dd MMMM y","yyyy-MM-dd","yy-MM-dd"],TIMEFORMATS:["h.mm.ss.a zzzz","h.mm.ss.a z","h.mm.ss.a","h.mm.a"],AVAILABLEFORMATS:{Md:"M-d",MMMMd:"d MMMM",MMMd:"d MMM"},FIRSTDAYOFWEEK:0,WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_sr={ERAS:["\u043f. \u043d. \u0435.","\u043d. \u0435"],ERANAMES:["\u041f\u0440\u0435 \u043d\u043e\u0432\u0435 \u0435\u0440\u0435","\u041d\u043e\u0432\u0435 \u0435\u0440\u0435"],NARROWMONTHS:["\u0458","\u0444","\u043c","\u0430","\u043c","\u0458","\u0458","\u0430","\u0441","\u043e","\u043d","\u0434"],STANDALONENARROWMONTHS:["\u0458","\u0444","\u043c","\u0430","\u043c","\u0458","\u0458","\u0430","\u0441","\u043e","\u043d","\u0434"],MONTHS:["\u0458\u0430\u043d\u0443\u0430\u0440",
"\u0444\u0435\u0431\u0440\u0443\u0430\u0440","\u043c\u0430\u0440\u0442","\u0430\u043f\u0440\u0438\u043b","\u043c\u0430\u0458","\u0458\u0443\u043d","\u0458\u0443\u043b","\u0430\u0432\u0433\u0443\u0441\u0442","\u0441\u0435\u043f\u0442\u0435\u043c\u0431\u0430\u0440","\u043e\u043a\u0442\u043e\u0431\u0430\u0440","\u043d\u043e\u0432\u0435\u043c\u0431\u0430\u0440","\u0434\u0435\u0446\u0435\u043c\u0431\u0430\u0440"],STANDALONEMONTHS:["\u0458\u0430\u043d\u0443\u0430\u0440","\u0444\u0435\u0431\u0440\u0443\u0430\u0440",
"\u043c\u0430\u0440\u0442","\u0430\u043f\u0440\u0438\u043b","\u043c\u0430\u0458","\u0458\u0443\u043d","\u0458\u0443\u043b","\u0430\u0432\u0433\u0443\u0441\u0442","\u0441\u0435\u043f\u0442\u0435\u043c\u0431\u0430\u0440","\u043e\u043a\u0442\u043e\u0431\u0430\u0440","\u043d\u043e\u0432\u0435\u043c\u0431\u0430\u0440","\u0434\u0435\u0446\u0435\u043c\u0431\u0430\u0440"],SHORTMONTHS:["\u0458\u0430\u043d","\u0444\u0435\u0431","\u043c\u0430\u0440","\u0430\u043f\u0440","\u043c\u0430\u0458","\u0458\u0443\u043d",
"\u0458\u0443\u043b","\u0430\u0432\u0433","\u0441\u0435\u043f","\u043e\u043a\u0442","\u043d\u043e\u0432","\u0434\u0435\u0446"],STANDALONESHORTMONTHS:["\u0458\u0430\u043d","\u0444\u0435\u0431","\u043c\u0430\u0440","\u0430\u043f\u0440","\u043c\u0430\u0458","\u0458\u0443\u043d","\u0458\u0443\u043b","\u0430\u0432\u0433","\u0441\u0435\u043f","\u043e\u043a\u0442","\u043d\u043e\u0432","\u0434\u0435\u0446"],WEEKDAYS:["\u043d\u0435\u0434\u0435\u0459\u0430","\u043f\u043e\u043d\u0435\u0434\u0435\u0459\u0430\u043a",
"\u0443\u0442\u043e\u0440\u0430\u043a","\u0441\u0440\u0435\u0434\u0430","\u0447\u0435\u0442\u0432\u0440\u0442\u0430\u043a","\u043f\u0435\u0442\u0430\u043a","\u0441\u0443\u0431\u043e\u0442\u0430"],STANDALONEWEEKDAYS:["\u043d\u0435\u0434\u0435\u0459\u0430","\u043f\u043e\u043d\u0435\u0434\u0435\u0459\u0430\u043a","\u0443\u0442\u043e\u0440\u0430\u043a","\u0441\u0440\u0435\u0434\u0430","\u0447\u0435\u0442\u0432\u0440\u0442\u0430\u043a","\u043f\u0435\u0442\u0430\u043a","\u0441\u0443\u0431\u043e\u0442\u0430"],
SHORTWEEKDAYS:["\u043d\u0435\u0434","\u043f\u043e\u043d","\u0443\u0442\u043e","\u0441\u0440\u0435","\u0447\u0435\u0442","\u043f\u0435\u0442","\u0441\u0443\u0431"],STANDALONESHORTWEEKDAYS:["\u043d\u0435\u0434","\u043f\u043e\u043d","\u0443\u0442\u043e","\u0441\u0440\u0435","\u0447\u0435\u0442","\u043f\u0435\u0442","\u0441\u0443\u0431"],NARROWWEEKDAYS:["\u043d","\u043f","\u0443","\u0441","\u0447","\u043f","\u0441"],STANDALONENARROWWEEKDAYS:["\u043d","\u043f","\u0443","\u0441","\u0447","\u043f","\u0441"],
SHORTQUARTERS:["\u041a1","\u041a2","\u041a3","\u041a4"],QUARTERS:["\u041f\u0440\u0432\u043e \u0442\u0440\u043e\u043c\u0435\u0441\u0435\u0447\u0458\u0435","\u0414\u0440\u0443\u0433\u043e \u0442\u0440\u043e\u043c\u0435\u0441\u0435\u0447\u0458\u0435","\u0422\u0440\u0435\u045b\u0435 \u0442\u0440\u043e\u043c\u0435\u0441\u0435\u0447\u0458\u0435","\u0427\u0435\u0442\u0432\u0440\u0442\u043e \u0442\u0440\u043e\u043c\u0435\u0441\u0435\u0447\u0458\u0435"],AMPMS:["\u043f\u0440\u0435 \u043f\u043e\u0434\u043d\u0435",
"\u043f\u043e\u043f\u043e\u0434\u043d\u0435"],DATEFORMATS:["EEEE, dd. MMMM y.","dd. MMMM y.","dd.MM.y.","d.M.yy."],TIMEFORMATS:["HH.mm.ss zzzz","HH.mm.ss z","HH.mm.ss","HH.mm"],AVAILABLEFORMATS:{Md:"d/M",MMMMd:"MMMM d.",MMMd:"MMM d."},FIRSTDAYOFWEEK:0,WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_sv={ERAS:["f.Kr.","e.Kr."],ERANAMES:["f\u00f6re Kristus","efter Kristus"],NARROWMONTHS:["J","F","M","A","M","J","J","A","S","O","N","D"],STANDALONENARROWMONTHS:["J","F","M","A","M","J","J","A","S","O","N","D"],MONTHS:["januari","februari","mars","april","maj","juni","juli","augusti","september","oktober","november","december"],STANDALONEMONTHS:["januari","februari","mars","april","maj","juni","juli","augusti","september","oktober","november","december"],SHORTMONTHS:["jan",
"feb","mar","apr","maj","jun","jul","aug","sep","okt","nov","dec"],STANDALONESHORTMONTHS:["jan","feb","mar","apr","maj","jun","jul","aug","sep","okt","nov","dec"],WEEKDAYS:["s\u00f6ndag","m\u00e5ndag","tisdag","onsdag","torsdag","fredag","l\u00f6rdag"],STANDALONEWEEKDAYS:["s\u00f6ndag","m\u00e5ndag","tisdag","onsdag","torsdag","fredag","l\u00f6rdag"],SHORTWEEKDAYS:["s\u00f6n","m\u00e5n","tis","ons","tors","fre","l\u00f6r"],STANDALONESHORTWEEKDAYS:["s\u00f6n","m\u00e5n","tis","ons","tors","fre","l\u00f6r"],
NARROWWEEKDAYS:["S","M","T","O","T","F","L"],STANDALONENARROWWEEKDAYS:["S","M","T","O","T","F","L"],SHORTQUARTERS:["K1","K2","K3","K4"],QUARTERS:["1:a kvartalet","2:a kvartalet","3:e kvartalet","4:e kvartalet"],AMPMS:["fm","em"],DATEFORMATS:["EEEE d MMMM y","d MMMM y","d MMM y","yyyy-MM-dd"],TIMEFORMATS:["'kl'. HH.mm.ss zzzz","HH.mm.ss z","HH.mm.ss","HH.mm"],AVAILABLEFORMATS:{Md:"d/M",MMMMd:"d MMMM",MMMd:"d MMM"},FIRSTDAYOFWEEK:0,WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_ta={ERAS:["\u0b95\u0bbf\u0bae\u0bc1","\u0b95\u0bbf\u0baa\u0bbf"],ERANAMES:["\u0b95\u0bbf\u0bb1\u0bbf\u0bb8\u0bcd\u0ba4\u0bc1\u0bb5\u0bc1\u0b95\u0bcd\u0b95\u0bc1 \u0bae\u0bc1\u0ba9\u0bcd","\u0b85\u0ba9\u0bcb \u0b9f\u0bcb\u0bae\u0bbf\u0ba9\u0bbf"],NARROWMONTHS:["\u0b9c","\u0baa\u0bbf","\u0bae\u0bbe","\u0b8f","\u0bae\u0bc7","\u0b9c\u0bc2","\u0b9c\u0bc2","\u0b86","\u0b9a\u0bc6","\u0b85","\u0ba8","\u0b9f\u0bbf"],STANDALONENARROWMONTHS:["\u0b9c","\u0baa\u0bbf","\u0bae\u0bbe","\u0b8f",
"\u0bae\u0bc7","\u0b9c\u0bc2","\u0b9c\u0bc2","\u0b86","\u0b9a\u0bc6","\u0b85","\u0ba8","\u0b9f\u0bbf"],MONTHS:["\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf","\u0baa\u0bbf\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf","\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd","\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd","\u0bae\u0bc7","\u0b9c\u0bc2\u0ba9\u0bcd","\u0b9c\u0bc2\u0bb2\u0bc8","\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bcd","\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bae\u0bcd\u0baa\u0bb0\u0bcd","\u0b85\u0b95\u0bcd\u0b9f\u0bcb\u0baa\u0bb0\u0bcd","\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd",
"\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd"],STANDALONEMONTHS:["\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf","\u0baa\u0bbf\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf","\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd","\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd","\u0bae\u0bc7","\u0b9c\u0bc2\u0ba9\u0bcd","\u0b9c\u0bc2\u0bb2\u0bc8","\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bcd","\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bae\u0bcd\u0baa\u0bb0\u0bcd","\u0b85\u0b95\u0bcd\u0b9f\u0bcb\u0baa\u0bb0\u0bcd","\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd","\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd"],
SHORTMONTHS:["\u0b9c\u0ba9.","\u0baa\u0bbf\u0baa\u0bcd.","\u0bae\u0bbe\u0bb0\u0bcd.","\u0b8f\u0baa\u0bcd.","\u0bae\u0bc7","\u0b9c\u0bc2\u0ba9\u0bcd","\u0b9c\u0bc2\u0bb2\u0bc8","\u0b86\u0b95.","\u0b9a\u0bc6\u0baa\u0bcd.","\u0b85\u0b95\u0bcd.","\u0ba8\u0bb5.","\u0b9f\u0bbf\u0b9a."],STANDALONESHORTMONTHS:["\u0b9c\u0ba9.","\u0baa\u0bbf\u0baa\u0bcd.","\u0bae\u0bbe\u0bb0\u0bcd.","\u0b8f\u0baa\u0bcd.","\u0bae\u0bc7","\u0b9c\u0bc2\u0ba9\u0bcd","\u0b9c\u0bc2\u0bb2\u0bc8","\u0b86\u0b95.","\u0b9a\u0bc6\u0baa\u0bcd.",
"\u0b85\u0b95\u0bcd.","\u0ba8\u0bb5.","\u0b9f\u0bbf\u0b9a."],WEEKDAYS:["\u0b9e\u0bbe\u0baf\u0bbf\u0bb1\u0bc1","\u0ba4\u0bbf\u0b99\u0bcd\u0b95\u0bb3\u0bcd","\u0b9a\u0bc6\u0bb5\u0bcd\u0bb5\u0bbe\u0baf\u0bcd","\u0baa\u0bc1\u0ba4\u0ba9\u0bcd","\u0bb5\u0bbf\u0baf\u0bbe\u0bb4\u0ba9\u0bcd","\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bbf","\u0b9a\u0ba9\u0bbf"],STANDALONEWEEKDAYS:["\u0b9e\u0bbe\u0baf\u0bbf\u0bb1\u0bc1","\u0ba4\u0bbf\u0b99\u0bcd\u0b95\u0bb3\u0bcd","\u0b9a\u0bc6\u0bb5\u0bcd\u0bb5\u0bbe\u0baf\u0bcd","\u0baa\u0bc1\u0ba4\u0ba9\u0bcd",
"\u0bb5\u0bbf\u0baf\u0bbe\u0bb4\u0ba9\u0bcd","\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bbf","\u0b9a\u0ba9\u0bbf"],SHORTWEEKDAYS:["\u0b9e\u0bbe","\u0ba4\u0bbf","\u0b9a\u0bc6","\u0baa\u0bc1","\u0bb5\u0bbf","\u0bb5\u0bc6","\u0b9a"],STANDALONESHORTWEEKDAYS:["\u0b9e\u0bbe","\u0ba4\u0bbf","\u0b9a\u0bc6","\u0baa\u0bc1","\u0bb5\u0bbf","\u0bb5\u0bc6","\u0b9a"],NARROWWEEKDAYS:["\u0b9e\u0bbe","\u0ba4\u0bbf","\u0b9a\u0bc6","\u0baa\u0bc1","\u0bb5\u0bbf","\u0bb5\u0bc6","\u0b9a"],STANDALONENARROWWEEKDAYS:["\u0b9e\u0bbe",
"\u0ba4\u0bbf","\u0b9a\u0bc6","\u0baa\u0bc1","\u0bb5\u0bbf","\u0bb5\u0bc6","\u0b9a"],SHORTQUARTERS:["Q1","Q2","Q3","Q4"],QUARTERS:["1\u0b86\u0bae\u0bcd \u0b95\u0bbe\u0bb2\u0bbe\u0ba3\u0bcd\u0b9f\u0bc1","2\u0b86\u0bae\u0bcd \u0b95\u0bbe\u0bb2\u0bbe\u0ba3\u0bcd\u0b9f\u0bc1","3\u0b86\u0bae\u0bcd \u0b95\u0bbe\u0bb2\u0bbe\u0ba3\u0bcd\u0b9f\u0bc1","4\u0b86\u0bae\u0bcd \u0b95\u0bbe\u0bb2\u0bbe\u0ba3\u0bcd\u0b9f\u0bc1"],AMPMS:["am","pm"],DATEFORMATS:["EEEE, d MMMM, y","d MMMM, y","d MMM, y","d-M-yy"],TIMEFORMATS:["h:mm:ss a zzzz",
"h:mm:ss a z","h:mm:ss a","h:mm a"],AVAILABLEFORMATS:{Md:"M-d",MMMMd:"d MMMM",MMMd:"MMM d"},FIRSTDAYOFWEEK:6,WEEKENDRANGE:[6,6],FIRSTWEEKCUTOFFDAY:2};
goog.i18n.DateTimeSymbols_te={ERAS:["BCE","CE"],ERANAMES:["\u0c08\u0c38\u0c3e\u0c2a\u0c42\u0c30\u0c4d\u0c35.","\u0c38\u0c28\u0c4d."],NARROWMONTHS:["\u0c1c","\u0c2b\u0c3f","\u0c2e","\u0c0e","\u0c2e\u0c46","\u0c1c\u0c41","\u0c1c\u0c41","\u0c06","\u0c38\u0c46","\u0c05","\u0c28","\u0c21\u0c3f"],STANDALONENARROWMONTHS:["\u0c1c","\u0c2b\u0c3f","\u0c2e","\u0c0e","\u0c2e\u0c46","\u0c1c\u0c41","\u0c1c\u0c41","\u0c06","\u0c38\u0c46","\u0c05","\u0c28","\u0c21\u0c3f"],MONTHS:["\u0c1c\u0c28\u0c35\u0c30\u0c3f",
"\u0c2b\u0c3f\u0c2c\u0c4d\u0c30\u0c35\u0c30\u0c3f","\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f","\u0c0f\u0c2a\u0c4d\u0c30\u0c3f\u0c32\u0c4d","\u0c2e\u0c47","\u0c1c\u0c42\u0c28\u0c4d","\u0c1c\u0c42\u0c32\u0c48","\u0c06\u0c17\u0c38\u0c4d\u0c1f\u0c41","\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02\u0c2c\u0c30\u0c4d","\u0c05\u0c15\u0c4d\u0c1f\u0c4b\u0c2c\u0c30\u0c4d","\u0c28\u0c35\u0c02\u0c2c\u0c30\u0c4d","\u0c21\u0c3f\u0c38\u0c46\u0c02\u0c2c\u0c30\u0c4d"],STANDALONEMONTHS:["\u0c1c\u0c28\u0c35\u0c30\u0c3f","\u0c2b\u0c3f\u0c2c\u0c4d\u0c30\u0c35\u0c30\u0c3f",
"\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f","\u0c0f\u0c2a\u0c4d\u0c30\u0c3f\u0c32\u0c4d","\u0c2e\u0c47","\u0c1c\u0c42\u0c28\u0c4d","\u0c1c\u0c42\u0c32\u0c48","\u0c06\u0c17\u0c38\u0c4d\u0c1f\u0c41","\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02\u0c2c\u0c30\u0c4d","\u0c05\u0c15\u0c4d\u0c1f\u0c4b\u0c2c\u0c30\u0c4d","\u0c28\u0c35\u0c02\u0c2c\u0c30\u0c4d","\u0c21\u0c3f\u0c38\u0c46\u0c02\u0c2c\u0c30\u0c4d"],SHORTMONTHS:["\u0c1c\u0c28\u0c35\u0c30\u0c3f","\u0c2b\u0c3f\u0c2c\u0c4d\u0c30\u0c35\u0c30\u0c3f","\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f",
"\u0c0f\u0c2a\u0c4d\u0c30\u0c3f\u0c32\u0c4d","\u0c2e\u0c47","\u0c1c\u0c42\u0c28\u0c4d","\u0c1c\u0c42\u0c32\u0c48","\u0c06\u0c17\u0c38\u0c4d\u0c1f\u0c41","\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02\u0c2c\u0c30\u0c4d","\u0c05\u0c15\u0c4d\u0c1f\u0c4b\u0c2c\u0c30\u0c4d","\u0c28\u0c35\u0c02\u0c2c\u0c30\u0c4d","\u0c21\u0c3f\u0c38\u0c46\u0c02\u0c2c\u0c30\u0c4d"],STANDALONESHORTMONTHS:["\u0c1c\u0c28\u0c35\u0c30\u0c3f","\u0c2b\u0c3f\u0c2c\u0c4d\u0c30\u0c35\u0c30\u0c3f","\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f",
"\u0c0f\u0c2a\u0c4d\u0c30\u0c3f\u0c32\u0c4d","\u0c2e\u0c47","\u0c1c\u0c42\u0c28\u0c4d","\u0c1c\u0c42\u0c32\u0c48","\u0c06\u0c17\u0c38\u0c4d\u0c1f\u0c41","\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02\u0c2c\u0c30\u0c4d","\u0c05\u0c15\u0c4d\u0c1f\u0c4b\u0c2c\u0c30\u0c4d","\u0c28\u0c35\u0c02\u0c2c\u0c30\u0c4d","\u0c21\u0c3f\u0c38\u0c46\u0c02\u0c2c\u0c30\u0c4d"],WEEKDAYS:["\u0c06\u0c26\u0c3f\u0c35\u0c3e\u0c30\u0c02","\u0c38\u0c4b\u0c2e\u0c35\u0c3e\u0c30\u0c02","\u0c2e\u0c02\u0c17\u0c33\u0c35\u0c3e\u0c30\u0c02",
"\u0c2c\u0c41\u0c27\u0c35\u0c3e\u0c30\u0c02","\u0c17\u0c41\u0c30\u0c41\u0c35\u0c3e\u0c30\u0c02","\u0c36\u0c41\u0c15\u0c4d\u0c30\u0c35\u0c3e\u0c30\u0c02","\u0c36\u0c28\u0c3f\u0c35\u0c3e\u0c30\u0c02"],STANDALONEWEEKDAYS:["\u0c06\u0c26\u0c3f\u0c35\u0c3e\u0c30\u0c02","\u0c38\u0c4b\u0c2e\u0c35\u0c3e\u0c30\u0c02","\u0c2e\u0c02\u0c17\u0c33\u0c35\u0c3e\u0c30\u0c02","\u0c2c\u0c41\u0c27\u0c35\u0c3e\u0c30\u0c02","\u0c17\u0c41\u0c30\u0c41\u0c35\u0c3e\u0c30\u0c02","\u0c36\u0c41\u0c15\u0c4d\u0c30\u0c35\u0c3e\u0c30\u0c02",
"\u0c36\u0c28\u0c3f\u0c35\u0c3e\u0c30\u0c02"],SHORTWEEKDAYS:["\u0c06\u0c26\u0c3f","\u0c38\u0c4b\u0c2e","\u0c2e\u0c02\u0c17\u0c33","\u0c2c\u0c41\u0c27","\u0c17\u0c41\u0c30\u0c41","\u0c36\u0c41\u0c15\u0c4d\u0c30","\u0c36\u0c28\u0c3f"],STANDALONESHORTWEEKDAYS:["\u0c06\u0c26\u0c3f","\u0c38\u0c4b\u0c2e","\u0c2e\u0c02\u0c17\u0c33","\u0c2c\u0c41\u0c27","\u0c17\u0c41\u0c30\u0c41","\u0c36\u0c41\u0c15\u0c4d\u0c30","\u0c36\u0c28\u0c3f"],NARROWWEEKDAYS:["\u0c06","\u0c38\u0c4b","\u0c2e","\u0c2d\u0c41","\u0c17\u0c41",
"\u0c36\u0c41","\u0c36"],STANDALONENARROWWEEKDAYS:["\u0c06","\u0c38\u0c4b","\u0c2e","\u0c2d\u0c41","\u0c17\u0c41","\u0c36\u0c41","\u0c36"],SHORTQUARTERS:["Q1","Q2","Q3","Q4"],QUARTERS:["\u0c12\u0c15\u0c1f\u0c3f 1","\u0c30\u0c46\u0c02\u0c21\u0c41 2","\u0c2e\u0c42\u0c21\u0c41 3","\u0c28\u0c3e\u0c32\u0c41\u0c17\u0c41 4"],AMPMS:["am","pm"],DATEFORMATS:["EEEE d MMMM y","d MMMM y","d MMM y","dd-MM-yy"],TIMEFORMATS:["h:mm:ss a zzzz","h:mm:ss a z","h:mm:ss a","h:mm a"],AVAILABLEFORMATS:{Md:"M-d",MMMMd:"d MMMM",
MMMd:"MMM d"},FIRSTDAYOFWEEK:6,WEEKENDRANGE:[6,6],FIRSTWEEKCUTOFFDAY:2};
goog.i18n.DateTimeSymbols_th={ERAS:["\u0e1b\u0e35\u0e01\u0e48\u0e2d\u0e19 \u0e04.\u0e28.","\u0e04.\u0e28."],ERANAMES:["\u0e1b\u0e35\u0e01\u0e48\u0e2d\u0e19\u0e04\u0e23\u0e34\u0e2a\u0e15\u0e4c\u0e28\u0e31\u0e01\u0e23\u0e32\u0e0a","\u0e04\u0e23\u0e34\u0e2a\u0e15\u0e4c\u0e28\u0e31\u0e01\u0e23\u0e32\u0e0a"],NARROWMONTHS:["\u0e21.\u0e04.","\u0e01.\u0e1e.","\u0e21\u0e35.\u0e04.","\u0e40\u0e21.\u0e22.","\u0e1e.\u0e04.","\u0e21\u0e34.\u0e22.","\u0e01.\u0e04.","\u0e2a.\u0e04.","\u0e01.\u0e22.","\u0e15.\u0e04.",
"\u0e1e.\u0e22.","\u0e18.\u0e04."],STANDALONENARROWMONTHS:["\u0e21.\u0e04.","\u0e01.\u0e1e.","\u0e21\u0e35.\u0e04.","\u0e40\u0e21.\u0e22.","\u0e1e.\u0e04.","\u0e21\u0e34.\u0e22.","\u0e01.\u0e04.","\u0e2a.\u0e04.","\u0e01.\u0e22.","\u0e15.\u0e04.","\u0e1e.\u0e22.","\u0e18.\u0e04."],MONTHS:["\u0e21\u0e01\u0e23\u0e32\u0e04\u0e21","\u0e01\u0e38\u0e21\u0e20\u0e32\u0e1e\u0e31\u0e19\u0e18\u0e4c","\u0e21\u0e35\u0e19\u0e32\u0e04\u0e21","\u0e40\u0e21\u0e29\u0e32\u0e22\u0e19","\u0e1e\u0e24\u0e29\u0e20\u0e32\u0e04\u0e21",
"\u0e21\u0e34\u0e16\u0e38\u0e19\u0e32\u0e22\u0e19","\u0e01\u0e23\u0e01\u0e0e\u0e32\u0e04\u0e21","\u0e2a\u0e34\u0e07\u0e2b\u0e32\u0e04\u0e21","\u0e01\u0e31\u0e19\u0e22\u0e32\u0e22\u0e19","\u0e15\u0e38\u0e25\u0e32\u0e04\u0e21","\u0e1e\u0e24\u0e28\u0e08\u0e34\u0e01\u0e32\u0e22\u0e19","\u0e18\u0e31\u0e19\u0e27\u0e32\u0e04\u0e21"],STANDALONEMONTHS:["\u0e21\u0e01\u0e23\u0e32\u0e04\u0e21","\u0e01\u0e38\u0e21\u0e20\u0e32\u0e1e\u0e31\u0e19\u0e18\u0e4c","\u0e21\u0e35\u0e19\u0e32\u0e04\u0e21","\u0e40\u0e21\u0e29\u0e32\u0e22\u0e19",
"\u0e1e\u0e24\u0e29\u0e20\u0e32\u0e04\u0e21","\u0e21\u0e34\u0e16\u0e38\u0e19\u0e32\u0e22\u0e19","\u0e01\u0e23\u0e01\u0e0e\u0e32\u0e04\u0e21","\u0e2a\u0e34\u0e07\u0e2b\u0e32\u0e04\u0e21","\u0e01\u0e31\u0e19\u0e22\u0e32\u0e22\u0e19","\u0e15\u0e38\u0e25\u0e32\u0e04\u0e21","\u0e1e\u0e24\u0e28\u0e08\u0e34\u0e01\u0e32\u0e22\u0e19","\u0e18\u0e31\u0e19\u0e27\u0e32\u0e04\u0e21"],SHORTMONTHS:["\u0e21.\u0e04.","\u0e01.\u0e1e.","\u0e21\u0e35.\u0e04.","\u0e40\u0e21.\u0e22.","\u0e1e.\u0e04.","\u0e21\u0e34.\u0e22.",
"\u0e01.\u0e04.","\u0e2a.\u0e04.","\u0e01.\u0e22.","\u0e15.\u0e04.","\u0e1e.\u0e22.","\u0e18.\u0e04."],STANDALONESHORTMONTHS:["\u0e21.\u0e04.","\u0e01.\u0e1e.","\u0e21\u0e35.\u0e04.","\u0e40\u0e21.\u0e22.","\u0e1e.\u0e04.","\u0e21\u0e34.\u0e22.","\u0e01.\u0e04.","\u0e2a.\u0e04.","\u0e01.\u0e22.","\u0e15.\u0e04.","\u0e1e.\u0e22.","\u0e18.\u0e04."],WEEKDAYS:["\u0e27\u0e31\u0e19\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c","\u0e27\u0e31\u0e19\u0e08\u0e31\u0e19\u0e17\u0e23\u0e4c","\u0e27\u0e31\u0e19\u0e2d\u0e31\u0e07\u0e04\u0e32\u0e23",
"\u0e27\u0e31\u0e19\u0e1e\u0e38\u0e18","\u0e27\u0e31\u0e19\u0e1e\u0e24\u0e2b\u0e31\u0e2a\u0e1a\u0e14\u0e35","\u0e27\u0e31\u0e19\u0e28\u0e38\u0e01\u0e23\u0e4c","\u0e27\u0e31\u0e19\u0e40\u0e2a\u0e32\u0e23\u0e4c"],STANDALONEWEEKDAYS:["\u0e27\u0e31\u0e19\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c","\u0e27\u0e31\u0e19\u0e08\u0e31\u0e19\u0e17\u0e23\u0e4c","\u0e27\u0e31\u0e19\u0e2d\u0e31\u0e07\u0e04\u0e32\u0e23","\u0e27\u0e31\u0e19\u0e1e\u0e38\u0e18","\u0e27\u0e31\u0e19\u0e1e\u0e24\u0e2b\u0e31\u0e2a\u0e1a\u0e14\u0e35",
"\u0e27\u0e31\u0e19\u0e28\u0e38\u0e01\u0e23\u0e4c","\u0e27\u0e31\u0e19\u0e40\u0e2a\u0e32\u0e23\u0e4c"],SHORTWEEKDAYS:["\u0e2d\u0e32.","\u0e08.","\u0e2d.","\u0e1e.","\u0e1e\u0e24.","\u0e28.","\u0e2a."],STANDALONESHORTWEEKDAYS:["\u0e2d\u0e32.","\u0e08.","\u0e2d.","\u0e1e.","\u0e1e\u0e24.","\u0e28.","\u0e2a."],NARROWWEEKDAYS:["\u0e2d","\u0e08","\u0e2d","\u0e1e","\u0e1e","\u0e28","\u0e2a"],STANDALONENARROWWEEKDAYS:["\u0e2d","\u0e08","\u0e2d","\u0e1e","\u0e1e","\u0e28","\u0e2a"],SHORTQUARTERS:["Q1","Q2",
"Q3","Q4"],QUARTERS:["\u0e44\u0e15\u0e23\u0e21\u0e32\u0e2a 1","\u0e44\u0e15\u0e23\u0e21\u0e32\u0e2a 2","\u0e44\u0e15\u0e23\u0e21\u0e32\u0e2a 3","\u0e44\u0e15\u0e23\u0e21\u0e32\u0e2a 4"],AMPMS:["\u0e01\u0e48\u0e2d\u0e19\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07","\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07"],DATEFORMATS:["EEEE\u0e17\u0e35\u0e48 d MMMM G y","d MMMM y","d MMM y","d/M/yyyy"],TIMEFORMATS:["H \u0e19\u0e32\u0e2c\u0e34\u0e01\u0e32 m \u0e19\u0e32\u0e17\u0e35 ss \u0e27\u0e34\u0e19\u0e32\u0e17\u0e35 zzzz",
"H \u0e19\u0e32\u0e2c\u0e34\u0e01\u0e32 m \u0e19\u0e32\u0e17\u0e35 ss \u0e27\u0e34\u0e19\u0e32\u0e17\u0e35 z","H:mm:ss","H:mm"],AVAILABLEFORMATS:{Md:"d/M",MMMMd:"d MMMM",MMMd:"d MMM"},FIRSTDAYOFWEEK:6,WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:2};
goog.i18n.DateTimeSymbols_tl={ERAS:["BCE","CE"],ERANAMES:["BCE","CE"],NARROWMONTHS:["E","P","M","A","M","H","H","A","S","O","N","D"],STANDALONENARROWMONTHS:["E","P","M","A","M","H","H","A","S","O","N","D"],MONTHS:["Enero","Pebrero","Marso","Abril","Mayo","Hunyo","Hulyo","Agosto","Setyembre","Oktubre","Nobyembre","Disyembre"],STANDALONEMONTHS:["Enero","Pebrero","Marso","Abril","Mayo","Hunyo","Hulyo","Agosto","Setyembre","Oktubre","Nobyembre","Disyembre"],SHORTMONTHS:["Ene","Peb","Mar","Abr","May",
"Hun","Hul","Ago","Set","Okt","Nob","Dis"],STANDALONESHORTMONTHS:["Ene","Peb","Mar","Abr","May","Hun","Hul","Ago","Set","Okt","Nob","Dis"],WEEKDAYS:["Linggo","Lunes","Martes","Miyerkules","Huwebes","Biyernes","Sabado"],STANDALONEWEEKDAYS:["Linggo","Lunes","Martes","Miyerkules","Huwebes","Biyernes","Sabado"],SHORTWEEKDAYS:["Lin","Lun","Mar","Mye","Huw","Bye","Sab"],STANDALONESHORTWEEKDAYS:["Lin","Lun","Mar","Miy","Huw","Biy","Sab"],NARROWWEEKDAYS:["L","L","M","M","H","B","S"],STANDALONENARROWWEEKDAYS:["L",
"L","M","M","H","B","S"],SHORTQUARTERS:["Q1","Q2","Q3","Q4"],QUARTERS:["Q1","Q2","Q3","Q4"],AMPMS:["AM","PM"],DATEFORMATS:["EEEE, MMMM dd y","MMMM d, y","MMM d, y","M/d/yy"],TIMEFORMATS:["HH:mm:ss zzzz","HH:mm:ss z","HH:mm:ss","HH:mm"],AVAILABLEFORMATS:{Md:"M-d",MMMMd:"MMMM d",MMMd:"MMM d"},FIRSTDAYOFWEEK:6,WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:2};
goog.i18n.DateTimeSymbols_tr={ERAS:["M\u00d6","MS"],ERANAMES:["Milattan \u00d6nce","Milattan Sonra"],NARROWMONTHS:["O","\u015e","M","N","M","H","T","A","E","E","K","A"],STANDALONENARROWMONTHS:["O","\u015e","M","N","M","H","T","A","E","E","K","A"],MONTHS:["Ocak","\u015eubat","Mart","Nisan","May\u0131s","Haziran","Temmuz","A\u011fustos","Eyl\u00fcl","Ekim","Kas\u0131m","Aral\u0131k"],STANDALONEMONTHS:["Ocak","\u015eubat","Mart","Nisan","May\u0131s","Haziran","Temmuz","A\u011fustos","Eyl\u00fcl","Ekim",
"Kas\u0131m","Aral\u0131k"],SHORTMONTHS:["Oca","\u015eub","Mar","Nis","May","Haz","Tem","A\u011fu","Eyl","Eki","Kas","Ara"],STANDALONESHORTMONTHS:["Oca","\u015eub","Mar","Nis","May","Haz","Tem","A\u011fu","Eyl","Eki","Kas","Ara"],WEEKDAYS:["Pazar","Pazartesi","Sal\u0131","\u00c7ar\u015famba","Per\u015fembe","Cuma","Cumartesi"],STANDALONEWEEKDAYS:["Pazar","Pazartesi","Sal\u0131","\u00c7ar\u015famba","Per\u015fembe","Cuma","Cumartesi"],SHORTWEEKDAYS:["Paz","Pzt","Sal","\u00c7ar","Per","Cum","Cmt"],
STANDALONESHORTWEEKDAYS:["Paz","Pzt","Sal","\u00c7ar","Per","Cum","Cmt"],NARROWWEEKDAYS:["P","P","S","\u00c7","P","C","C"],STANDALONENARROWWEEKDAYS:["P","P","S","\u00c7","P","C","C"],SHORTQUARTERS:["\u00c71","\u00c72","\u00c73","\u00c74"],QUARTERS:["1. \u00e7eyrek","2. \u00e7eyrek","3. \u00e7eyrek","4. \u00e7eyrek"],AMPMS:["AM","PM"],DATEFORMATS:["dd MMMM y EEEE","dd MMMM y","dd MMM y","dd MM yyyy"],TIMEFORMATS:["HH:mm:ss zzzz","HH:mm:ss z","HH:mm:ss","HH:mm"],AVAILABLEFORMATS:{Md:"dd/MM",MMMMd:"dd MMMM",
MMMd:"dd MMM"},FIRSTDAYOFWEEK:0,WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_uk={ERAS:["\u0434\u043e \u043d.\u0435.","\u043d.\u0435."],ERANAMES:["\u0434\u043e \u043d\u0430\u0448\u043e\u0457 \u0435\u0440\u0438","\u043d\u0430\u0448\u043e\u0457 \u0435\u0440\u0438"],NARROWMONTHS:["\u0421","\u041b","\u0411","\u041a","\u0422","\u0427","\u041b","\u0421","\u0412","\u0416","\u041b","\u0413"],STANDALONENARROWMONTHS:["\u0421","\u041b","\u0411","\u041a","\u0422","\u0427","\u041b","\u0421","\u0412","\u0416","\u041b","\u0413"],MONTHS:["\u0441\u0456\u0447\u043d\u044f",
"\u043b\u044e\u0442\u043e\u0433\u043e","\u0431\u0435\u0440\u0435\u0437\u043d\u044f","\u043a\u0432\u0456\u0442\u043d\u044f","\u0442\u0440\u0430\u0432\u043d\u044f","\u0447\u0435\u0440\u0432\u043d\u044f","\u043b\u0438\u043f\u043d\u044f","\u0441\u0435\u0440\u043f\u043d\u044f","\u0432\u0435\u0440\u0435\u0441\u043d\u044f","\u0436\u043e\u0432\u0442\u043d\u044f","\u043b\u0438\u0441\u0442\u043e\u043f\u0430\u0434\u0430","\u0433\u0440\u0443\u0434\u043d\u044f"],STANDALONEMONTHS:["\u0421\u0456\u0447\u0435\u043d\u044c",
"\u041b\u044e\u0442\u0438\u0439","\u0411\u0435\u0440\u0435\u0437\u0435\u043d\u044c","\u041a\u0432\u0456\u0442\u0435\u043d\u044c","\u0422\u0440\u0430\u0432\u0435\u043d\u044c","\u0427\u0435\u0440\u0432\u0435\u043d\u044c","\u041b\u0438\u043f\u0435\u043d\u044c","\u0421\u0435\u0440\u043f\u0435\u043d\u044c","\u0412\u0435\u0440\u0435\u0441\u0435\u043d\u044c","\u0416\u043e\u0432\u0442\u0435\u043d\u044c","\u041b\u0438\u0441\u0442\u043e\u043f\u0430\u0434","\u0413\u0440\u0443\u0434\u0435\u043d\u044c"],SHORTMONTHS:["\u0441\u0456\u0447.",
"\u043b\u044e\u0442.","\u0431\u0435\u0440.","\u043a\u0432\u0456\u0442.","\u0442\u0440\u0430\u0432.","\u0447\u0435\u0440\u0432.","\u043b\u0438\u043f.","\u0441\u0435\u0440\u043f.","\u0432\u0435\u0440.","\u0436\u043e\u0432\u0442.","\u043b\u0438\u0441\u0442.","\u0433\u0440\u0443\u0434."],STANDALONESHORTMONTHS:["\u0421\u0456\u0447","\u041b\u044e\u0442","\u0411\u0435\u0440","\u041a\u0432\u0456","\u0422\u0440\u0430","\u0427\u0435\u0440","\u041b\u0438\u043f","\u0421\u0435\u0440","\u0412\u0435\u0440","\u0416\u043e\u0432",
"\u041b\u0438\u0441","\u0413\u0440\u0443"],WEEKDAYS:["\u041d\u0435\u0434\u0456\u043b\u044f","\u041f\u043e\u043d\u0435\u0434\u0456\u043b\u043e\u043a","\u0412\u0456\u0432\u0442\u043e\u0440\u043e\u043a","\u0421\u0435\u0440\u0435\u0434\u0430","\u0427\u0435\u0442\u0432\u0435\u0440","\u041f\u02bc\u044f\u0442\u043d\u0438\u0446\u044f","\u0421\u0443\u0431\u043e\u0442\u0430"],STANDALONEWEEKDAYS:["\u041d\u0435\u0434\u0456\u043b\u044f","\u041f\u043e\u043d\u0435\u0434\u0456\u043b\u043e\u043a","\u0412\u0456\u0432\u0442\u043e\u0440\u043e\u043a",
"\u0421\u0435\u0440\u0435\u0434\u0430","\u0427\u0435\u0442\u0432\u0435\u0440","\u041f\u02bc\u044f\u0442\u043d\u0438\u0446\u044f","\u0421\u0443\u0431\u043e\u0442\u0430"],SHORTWEEKDAYS:["\u041d\u0434","\u041f\u043d","\u0412\u0442","\u0421\u0440","\u0427\u0442","\u041f\u0442","\u0421\u0431"],STANDALONESHORTWEEKDAYS:["\u041d\u0434","\u041f\u043d","\u0412\u0442","\u0421\u0440","\u0427\u0442","\u041f\u0442","\u0421\u0431"],NARROWWEEKDAYS:["\u041d","\u041f","\u0412","\u0421","\u0427","\u041f","\u0421"],
STANDALONENARROWWEEKDAYS:["\u041d","\u041f","\u0412","\u0421","\u0427","\u041f","\u0421"],SHORTQUARTERS:["I \u043a\u0432.","II \u043a\u0432.","III \u043a\u0432.","IV \u043a\u0432."],QUARTERS:["I \u043a\u0432\u0430\u0440\u0442\u0430\u043b","II \u043a\u0432\u0430\u0440\u0442\u0430\u043b","III \u043a\u0432\u0430\u0440\u0442\u0430\u043b","IV \u043a\u0432\u0430\u0440\u0442\u0430\u043b"],AMPMS:["\u0434\u043f","\u043f\u043f"],DATEFORMATS:["EEEE, d MMMM y '\u0440'.","d MMMM y '\u0440'.","d MMM y","dd.MM.yy"],
TIMEFORMATS:["HH:mm:ss zzzz","HH:mm:ss z","HH:mm:ss","HH:mm"],AVAILABLEFORMATS:{Md:"M-d",MMMMd:"d MMMM",MMMd:"d MMM"},FIRSTDAYOFWEEK:0,WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_ur={ERAS:["\u0642 \u0645","\u0639\u064a\u0633\u0648\u06cc \u0633\u0646"],ERANAMES:["\u0642\u0628\u0644 \u0645\u0633\u064a\u062d","\u0639\u064a\u0633\u0648\u06cc \u0633\u0646"],NARROWMONTHS:["\u062c","\u0641","\u0645","\u0627","\u0645","\u062c","\u062c","\u0627","\u0633","\u0627","\u0646","\u062f"],STANDALONENARROWMONTHS:["\u062c","\u0641","\u0645","\u0627","\u0645","\u062c","\u062c","\u0627","\u0633","\u0627","\u0646","\u062f"],MONTHS:["\u062c\u0646\u0648\u0631\u06cc","\u0641\u0631\u0648\u0631\u06cc",
"\u0645\u0627\u0631 \u0686","\u0627\u067e\u0631\u064a\u0644","\u0645\u0626","\u062c\u0648\u0646","\u062c\u0648\u0644\u0627\u0626","\u0627\u06af\u0633\u062a","\u0633\u062a\u0645\u0628\u0631","\u0627\u06a9\u062a\u0648\u0628\u0631","\u0646\u0648\u0645\u0628\u0631","\u062f\u0633\u0645\u0628\u0631"],STANDALONEMONTHS:["\u062c\u0646\u0648\u0631\u06cc","\u0641\u0631\u0648\u0631\u06cc","\u0645\u0627\u0631 \u0686","\u0627\u067e\u0631\u064a\u0644","\u0645\u0626","\u062c\u0648\u0646","\u062c\u0648\u0644\u0627\u0626",
"\u0627\u06af\u0633\u062a","\u0633\u062a\u0645\u0628\u0631","\u0627\u06a9\u062a\u0648\u0628\u0631","\u0646\u0648\u0645\u0628\u0631","\u062f\u0633\u0645\u0628\u0631"],SHORTMONTHS:["\u062c\u0646\u0648\u0631\u06cc","\u0641\u0631\u0648\u0631\u06cc","\u0645\u0627\u0631 \u0686","\u0627\u067e\u0631\u064a\u0644","\u0645\u0626","\u062c\u0648\u0646","\u062c\u0648\u0644\u0627\u0626","\u0627\u06af\u0633\u062a","\u0633\u062a\u0645\u0628\u0631","\u0627\u06a9\u062a\u0648\u0628\u0631","\u0646\u0648\u0645\u0628\u0631",
"\u062f\u0633\u0645\u0628\u0631"],STANDALONESHORTMONTHS:["\u062c\u0646\u0648\u0631\u06cc","\u0641\u0631\u0648\u0631\u06cc","\u0645\u0627\u0631 \u0686","\u0627\u067e\u0631\u064a\u0644","\u0645\u0626","\u062c\u0648\u0646","\u062c\u0648\u0644\u0627\u0626","\u0627\u06af\u0633\u062a","\u0633\u062a\u0645\u0628\u0631","\u0627\u06a9\u062a\u0648\u0628\u0631","\u0646\u0648\u0645\u0628\u0631","\u062f\u0633\u0645\u0628\u0631"],WEEKDAYS:["\u0627\u062a\u0648\u0627\u0631","\u067e\u064a\u0631","\u0645\u0646\u06af\u0644",
"\u0628\u062f\u0647","\u062c\u0645\u0639\u0631\u0627\u062a","\u062c\u0645\u0639\u06c1","\u06c1\u0641\u062a\u06c1"],STANDALONEWEEKDAYS:["\u0627\u062a\u0648\u0627\u0631","\u067e\u064a\u0631","\u0645\u0646\u06af\u0644","\u0628\u062f\u0647","\u062c\u0645\u0639\u0631\u0627\u062a","\u062c\u0645\u0639\u06c1","\u06c1\u0641\u062a\u06c1"],SHORTWEEKDAYS:["\u0627\u062a\u0648\u0627\u0631","\u067e\u064a\u0631","\u0645\u0646\u06af\u0644","\u0628\u062f\u0647","\u062c\u0645\u0639\u0631\u0627\u062a","\u062c\u0645\u0639\u06c1",
"\u06c1\u0641\u062a\u06c1"],STANDALONESHORTWEEKDAYS:["\u0627\u062a\u0648\u0627\u0631","\u067e\u064a\u0631","\u0645\u0646\u06af\u0644","\u0628\u062f\u0647","\u062c\u0645\u0639\u0631\u0627\u062a","\u062c\u0645\u0639\u06c1","\u06c1\u0641\u062a\u06c1"],NARROWWEEKDAYS:["\u0627","\u067e","\u0645","\u0628","\u062c","\u062c","\u06c1"],STANDALONENARROWWEEKDAYS:["1","2","3","4","5","6","7"],SHORTQUARTERS:["1\u0633\u06c1 \u0645\u0627\u06c1\u06cc","2\u0633\u06c1 \u0645\u0627\u06c1\u06cc","3\u0633\u06c1 \u0645\u0627\u06c1\u06cc",
"4\u0633\u06c1 \u0645\u0627\u06c1\u06cc"],QUARTERS:["\u067e\u06c1\u0644\u06cc \u0633\u06c1 \u0645\u0627\u06c1\u06cc","\u062f\u0648\u0633\u0631\u06cc \u0633\u06c1 \u0645\u0627\u06c1\u06cc","\u062a\u064a\u0633\u0631\u06cc \u0633\u06c1 \u0645\u0627\u06c1\u06cc","\u0686\u0648\u062a\u0647\u06cc \u0633\u06c1 \u0645\u0627\u06c1\u06cc"],AMPMS:["\u0642\u0628\u0644 \u062f\u0648\u067e\u06c1\u0631","\u0628\u0639\u062f \u062f\u0648\u067e\u06c1\u0631"],DATEFORMATS:["EEEE, d, MMMM y","d, MMMM y","d, MMM y","d/M/yy"],
TIMEFORMATS:["h:mm:ss a zzzz","h:mm:ss a z","h:mm:ss a","h:mm a"],AVAILABLEFORMATS:{Md:"M-d",MMMMd:"MMMM d",MMMd:"MMM d"},FIRSTDAYOFWEEK:6,WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:2};
goog.i18n.DateTimeSymbols_vi={ERAS:["tr. CN","sau CN"],ERANAMES:["tr. CN","sau CN"],NARROWMONTHS:["1","2","3","4","5","6","7","8","9","10","11","12"],STANDALONENARROWMONTHS:["1","2","3","4","5","6","7","8","9","10","11","12"],MONTHS:["th\u00e1ng m\u1ed9t","th\u00e1ng hai","th\u00e1ng ba","th\u00e1ng t\u01b0","th\u00e1ng n\u0103m","th\u00e1ng s\u00e1u","th\u00e1ng b\u1ea3y","th\u00e1ng t\u00e1m","th\u00e1ng ch\u00edn","th\u00e1ng m\u01b0\u1eddi","th\u00e1ng m\u01b0\u1eddi m\u1ed9t","th\u00e1ng m\u01b0\u1eddi hai"],
STANDALONEMONTHS:["th\u00e1ng m\u1ed9t","th\u00e1ng hai","th\u00e1ng ba","th\u00e1ng t\u01b0","th\u00e1ng n\u0103m","th\u00e1ng s\u00e1u","th\u00e1ng b\u1ea3y","th\u00e1ng t\u00e1m","th\u00e1ng ch\u00edn","th\u00e1ng m\u01b0\u1eddi","th\u00e1ng m\u01b0\u1eddi m\u1ed9t","th\u00e1ng m\u01b0\u1eddi hai"],SHORTMONTHS:["thg 1","thg 2","thg 3","thg 4","thg 5","thg 6","thg 7","thg 8","thg 9","thg 10","thg 11","thg 12"],STANDALONESHORTMONTHS:["thg 1","thg 2","thg 3","thg 4","thg 5","thg 6","thg 7","thg 8",
"thg 9","thg 10","thg 11","thg 12"],WEEKDAYS:["Ch\u1ee7 nh\u1eadt","Th\u1ee9 hai","Th\u1ee9 ba","Th\u1ee9 t\u01b0","Th\u1ee9 n\u0103m","Th\u1ee9 s\u00e1u","Th\u1ee9 b\u1ea3y"],STANDALONEWEEKDAYS:["Ch\u1ee7 nh\u1eadt","Th\u1ee9 hai","Th\u1ee9 ba","Th\u1ee9 t\u01b0","Th\u1ee9 n\u0103m","Th\u1ee9 s\u00e1u","Th\u1ee9 b\u1ea3y"],SHORTWEEKDAYS:["CN","Th 2","Th 3","Th 4","Th 5","Th 6","Th 7"],STANDALONESHORTWEEKDAYS:["CN","Th 2","Th 3","Th 4","Th 5","Th 6","Th 7"],NARROWWEEKDAYS:["1","2","3","4","5","6",
"7"],STANDALONENARROWWEEKDAYS:["1","2","3","4","5","6","7"],SHORTQUARTERS:["Q1","Q2","Q3","Q4"],QUARTERS:["Q1","Q2","Q3","Q4"],AMPMS:["SA","CH"],DATEFORMATS:["EEEE, 'ng\u00e0y' dd MMMM 'n\u0103m' y","'Ng\u00e0y' dd 'th\u00e1ng' M 'n\u0103m' y","dd-MM-yyyy","dd/MM/yyyy"],TIMEFORMATS:["HH:mm:ss zzzz","HH:mm:ss z","HH:mm:ss","HH:mm"],AVAILABLEFORMATS:{Md:"d-M",MMMMd:"d MMMM",MMMd:"d MMM"},FIRSTDAYOFWEEK:0,WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_zh={ERAS:["\u516c\u5143\u524d","\u516c\u5143"],ERANAMES:["\u516c\u5143\u524d","\u516c\u5143"],NARROWMONTHS:["1\u6708","2\u6708","3\u6708","4\u6708","5\u6708","6\u6708","7\u6708","8\u6708","9\u6708","10\u6708","11\u6708","12\u6708"],STANDALONENARROWMONTHS:["1\u6708","2\u6708","3\u6708","4\u6708","5\u6708","6\u6708","7\u6708","8\u6708","9\u6708","10\u6708","11\u6708","12\u6708"],MONTHS:["1\u6708","2\u6708","3\u6708","4\u6708","5\u6708","6\u6708","7\u6708","8\u6708","9\u6708",
"10\u6708","11\u6708","12\u6708"],STANDALONEMONTHS:["\u4e00\u6708","\u4e8c\u6708","\u4e09\u6708","\u56db\u6708","\u4e94\u6708","\u516d\u6708","\u4e03\u6708","\u516b\u6708","\u4e5d\u6708","\u5341\u6708","\u5341\u4e00\u6708","\u5341\u4e8c\u6708"],SHORTMONTHS:["1\u6708","2\u6708","3\u6708","4\u6708","5\u6708","6\u6708","7\u6708","8\u6708","9\u6708","10\u6708","11\u6708","12\u6708"],STANDALONESHORTMONTHS:["\u4e00\u6708","\u4e8c\u6708","\u4e09\u6708","\u56db\u6708","\u4e94\u6708","\u516d\u6708","\u4e03\u6708",
"\u516b\u6708","\u4e5d\u6708","\u5341\u6708","\u5341\u4e00\u6708","\u5341\u4e8c\u6708"],WEEKDAYS:["\u661f\u671f\u65e5","\u661f\u671f\u4e00","\u661f\u671f\u4e8c","\u661f\u671f\u4e09","\u661f\u671f\u56db","\u661f\u671f\u4e94","\u661f\u671f\u516d"],STANDALONEWEEKDAYS:["\u661f\u671f\u65e5","\u661f\u671f\u4e00","\u661f\u671f\u4e8c","\u661f\u671f\u4e09","\u661f\u671f\u56db","\u661f\u671f\u4e94","\u661f\u671f\u516d"],SHORTWEEKDAYS:["\u5468\u65e5","\u5468\u4e00","\u5468\u4e8c","\u5468\u4e09","\u5468\u56db",
"\u5468\u4e94","\u5468\u516d"],STANDALONESHORTWEEKDAYS:["\u5468\u65e5","\u5468\u4e00","\u5468\u4e8c","\u5468\u4e09","\u5468\u56db","\u5468\u4e94","\u5468\u516d"],NARROWWEEKDAYS:["\u65e5","\u4e00","\u4e8c","\u4e09","\u56db","\u4e94","\u516d"],STANDALONENARROWWEEKDAYS:["\u65e5","\u4e00","\u4e8c","\u4e09","\u56db","\u4e94","\u516d"],SHORTQUARTERS:["1\u5b63","2\u5b63","3\u5b63","4\u5b63"],QUARTERS:["\u7b2c1\u5b63\u5ea6","\u7b2c2\u5b63\u5ea6","\u7b2c3\u5b63\u5ea6","\u7b2c4\u5b63\u5ea6"],AMPMS:["\u4e0a\u5348",
"\u4e0b\u5348"],DATEFORMATS:["y\u5e74M\u6708d\u65e5EEEE","y\u5e74M\u6708d\u65e5","yyyy-M-d","yy-M-d"],TIMEFORMATS:["zzzzah\u65f6mm\u5206ss\u79d2","zah\u65f6mm\u5206ss\u79d2","ahh:mm:ss","ah:mm"],AVAILABLEFORMATS:{Md:"M-d",MMMMd:"MMMMd\u65e5",MMMd:"MMMd\u65e5"},FIRSTDAYOFWEEK:6,WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:2};goog.i18n.DateTimeSymbols_zh_CN=goog.i18n.DateTimeSymbols_zh;
goog.i18n.DateTimeSymbols_zh_HK={ERAS:["\u516c\u5143\u524d","\u516c\u5143"],ERANAMES:["\u897f\u5143\u524d","\u897f\u5143"],NARROWMONTHS:["1","2","3","4","5","6","7","8","9","10","11","12"],STANDALONENARROWMONTHS:["1","2","3","4","5","6","7","8","9","10","11","12"],MONTHS:["1\u6708","2\u6708","3\u6708","4\u6708","5\u6708","6\u6708","7\u6708","8\u6708","9\u6708","10\u6708","11\u6708","12\u6708"],STANDALONEMONTHS:["\u4e00\u6708","\u4e8c\u6708","\u4e09\u6708","\u56db\u6708","\u4e94\u6708","\u516d\u6708",
"\u4e03\u6708","\u516b\u6708","\u4e5d\u6708","\u5341\u6708","\u5341\u4e00\u6708","\u5341\u4e8c\u6708"],SHORTMONTHS:["1\u6708","2\u6708","3\u6708","4\u6708","5\u6708","6\u6708","7\u6708","8\u6708","9\u6708","10\u6708","11\u6708","12\u6708"],STANDALONESHORTMONTHS:["1\u6708","2\u6708","3\u6708","4\u6708","5\u6708","6\u6708","7\u6708","8\u6708","9\u6708","10\u6708","11\u6708","12\u6708"],WEEKDAYS:["\u661f\u671f\u65e5","\u661f\u671f\u4e00","\u661f\u671f\u4e8c","\u661f\u671f\u4e09","\u661f\u671f\u56db",
"\u661f\u671f\u4e94","\u661f\u671f\u516d"],STANDALONEWEEKDAYS:["\u661f\u671f\u65e5","\u661f\u671f\u4e00","\u661f\u671f\u4e8c","\u661f\u671f\u4e09","\u661f\u671f\u56db","\u661f\u671f\u4e94","\u661f\u671f\u516d"],SHORTWEEKDAYS:["\u9031\u65e5","\u9031\u4e00","\u9031\u4e8c","\u9031\u4e09","\u9031\u56db","\u9031\u4e94","\u9031\u516d"],STANDALONESHORTWEEKDAYS:["\u9031\u65e5","\u9031\u4e00","\u9031\u4e8c","\u9031\u4e09","\u9031\u56db","\u9031\u4e94","\u9031\u516d"],NARROWWEEKDAYS:["\u65e5","\u4e00","\u4e8c",
"\u4e09","\u56db","\u4e94","\u516d"],STANDALONENARROWWEEKDAYS:["\u65e5","\u4e00","\u4e8c","\u4e09","\u56db","\u4e94","\u516d"],SHORTQUARTERS:["1\u5b63","2\u5b63","3\u5b63","4\u5b63"],QUARTERS:["\u7b2c1\u5b63","\u7b2c2\u5b63","\u7b2c3\u5b63","\u7b2c4\u5b63"],AMPMS:["\u4e0a\u5348","\u4e0b\u5348"],DATEFORMATS:["y\u5e74M\u6708d\u65e5EEEE","y\u5e74M\u6708d\u65e5","y\u5e74M\u6708d\u65e5","yy\u5e74M\u6708d\u65e5"],TIMEFORMATS:["zzzzah\u6642mm\u5206ss\u79d2","zah\u6642mm\u5206ss\u79d2","ahh:mm:ss","ah:mm"],
AVAILABLEFORMATS:{Md:"M/d",MMMMd:"MMMMd\u65e5",MMMd:"MMMd\u65e5"},FIRSTDAYOFWEEK:6,WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:2};
goog.i18n.DateTimeSymbols_zh_TW={ERAS:["\u516c\u5143\u524d","\u516c\u5143"],ERANAMES:["\u897f\u5143\u524d","\u897f\u5143"],NARROWMONTHS:["1","2","3","4","5","6","7","8","9","10","11","12"],STANDALONENARROWMONTHS:["1","2","3","4","5","6","7","8","9","10","11","12"],MONTHS:["1\u6708","2\u6708","3\u6708","4\u6708","5\u6708","6\u6708","7\u6708","8\u6708","9\u6708","10\u6708","11\u6708","12\u6708"],STANDALONEMONTHS:["\u4e00\u6708","\u4e8c\u6708","\u4e09\u6708","\u56db\u6708","\u4e94\u6708","\u516d\u6708",
"\u4e03\u6708","\u516b\u6708","\u4e5d\u6708","\u5341\u6708","\u5341\u4e00\u6708","\u5341\u4e8c\u6708"],SHORTMONTHS:["1\u6708","2\u6708","3\u6708","4\u6708","5\u6708","6\u6708","7\u6708","8\u6708","9\u6708","10\u6708","11\u6708","12\u6708"],STANDALONESHORTMONTHS:["1\u6708","2\u6708","3\u6708","4\u6708","5\u6708","6\u6708","7\u6708","8\u6708","9\u6708","10\u6708","11\u6708","12\u6708"],WEEKDAYS:["\u661f\u671f\u65e5","\u661f\u671f\u4e00","\u661f\u671f\u4e8c","\u661f\u671f\u4e09","\u661f\u671f\u56db",
"\u661f\u671f\u4e94","\u661f\u671f\u516d"],STANDALONEWEEKDAYS:["\u661f\u671f\u65e5","\u661f\u671f\u4e00","\u661f\u671f\u4e8c","\u661f\u671f\u4e09","\u661f\u671f\u56db","\u661f\u671f\u4e94","\u661f\u671f\u516d"],SHORTWEEKDAYS:["\u9031\u65e5","\u9031\u4e00","\u9031\u4e8c","\u9031\u4e09","\u9031\u56db","\u9031\u4e94","\u9031\u516d"],STANDALONESHORTWEEKDAYS:["\u9031\u65e5","\u9031\u4e00","\u9031\u4e8c","\u9031\u4e09","\u9031\u56db","\u9031\u4e94","\u9031\u516d"],NARROWWEEKDAYS:["\u65e5","\u4e00","\u4e8c",
"\u4e09","\u56db","\u4e94","\u516d"],STANDALONENARROWWEEKDAYS:["\u65e5","\u4e00","\u4e8c","\u4e09","\u56db","\u4e94","\u516d"],SHORTQUARTERS:["1\u5b63","2\u5b63","3\u5b63","4\u5b63"],QUARTERS:["\u7b2c1\u5b63","\u7b2c2\u5b63","\u7b2c3\u5b63","\u7b2c4\u5b63"],AMPMS:["\u4e0a\u5348","\u4e0b\u5348"],DATEFORMATS:["y\u5e74M\u6708d\u65e5EEEE","y\u5e74M\u6708d\u65e5","yyyy/M/d","yy/M/d"],TIMEFORMATS:["zzzzah\u6642mm\u5206ss\u79d2","zah\u6642mm\u5206ss\u79d2","ah:mm:ss","ah:mm"],AVAILABLEFORMATS:{Md:"M/d",
MMMMd:"MMMMd\u65e5",MMMd:"MMMd\u65e5"},FIRSTDAYOFWEEK:6,WEEKENDRANGE:[5,6],FIRSTWEEKCUTOFFDAY:2};
if(goog.LOCALE=="ar")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_ar;else if(goog.LOCALE=="bg")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_bg;else if(goog.LOCALE=="bn")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_bn;else if(goog.LOCALE=="ca")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_ca;else if(goog.LOCALE=="cs")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_cs;else if(goog.LOCALE=="da")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_da;else if(goog.LOCALE==
"de")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_de;else if(goog.LOCALE=="de_AT"||goog.LOCALE=="de-AT")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_de_AT;else if(goog.LOCALE=="de_CH"||goog.LOCALE=="de-CH")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_de;else if(goog.LOCALE=="el")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_el;else if(goog.LOCALE=="en")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_en;else if(goog.LOCALE=="en_AU"||goog.LOCALE=="en-AU")goog.i18n.DateTimeSymbols=
goog.i18n.DateTimeSymbols_en_AU;else if(goog.LOCALE=="en_GB"||goog.LOCALE=="en-GB")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_en_GB;else if(goog.LOCALE=="en_IE"||goog.LOCALE=="en-IE")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_en_IE;else if(goog.LOCALE=="en_IN"||goog.LOCALE=="en-IN")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_en_IN;else if(goog.LOCALE=="en_SG"||goog.LOCALE=="en-SG")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_en;else if(goog.LOCALE=="en_US"||goog.LOCALE==
"en-US")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_en;else if(goog.LOCALE=="en_ZA"||goog.LOCALE=="en-ZA")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_en_ZA;else if(goog.LOCALE=="es")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_es;else if(goog.LOCALE=="et")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_et;else if(goog.LOCALE=="eu")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_eu;else if(goog.LOCALE=="fa")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_fa;else if(goog.LOCALE==
"fi")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_fi;else if(goog.LOCALE=="fil")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_fil;else if(goog.LOCALE=="fr")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_fr;else if(goog.LOCALE=="fr_CA"||goog.LOCALE=="fr-CA")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_fr_CA;else if(goog.LOCALE=="gl")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_gl;else if(goog.LOCALE=="gsw")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_gsw;else if(goog.LOCALE==
"gu")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_gu;else if(goog.LOCALE=="he")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_he;else if(goog.LOCALE=="hi")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_hi;else if(goog.LOCALE=="hr")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_hr;else if(goog.LOCALE=="hu")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_hu;else if(goog.LOCALE=="id")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_id;else if(goog.LOCALE=="in")goog.i18n.DateTimeSymbols=
goog.i18n.DateTimeSymbols_in;else if(goog.LOCALE=="is")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_is;else if(goog.LOCALE=="it")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_it;else if(goog.LOCALE=="iw")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_iw;else if(goog.LOCALE=="ja")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_ja;else if(goog.LOCALE=="kn")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_kn;else if(goog.LOCALE=="ko")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_ko;
else if(goog.LOCALE=="ln")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_ln;else if(goog.LOCALE=="lt")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_lt;else if(goog.LOCALE=="lv")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_lv;else if(goog.LOCALE=="ml")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_ml;else if(goog.LOCALE=="mo")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_mo;else if(goog.LOCALE=="mr")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_mr;else if(goog.LOCALE==
"ms")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_ms;else if(goog.LOCALE=="mt")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_mt;else if(goog.LOCALE=="nl")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_nl;else if(goog.LOCALE=="no")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_no;else if(goog.LOCALE=="or")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_or;else if(goog.LOCALE=="pl")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_pl;else if(goog.LOCALE=="pt")goog.i18n.DateTimeSymbols=
goog.i18n.DateTimeSymbols_pt;else if(goog.LOCALE=="pt_BR"||goog.LOCALE=="pt-BR")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_pt;else if(goog.LOCALE=="pt_PT"||goog.LOCALE=="pt-PT")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_pt_PT;else if(goog.LOCALE=="ro")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_ro;else if(goog.LOCALE=="ru")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_ru;else if(goog.LOCALE=="sk")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_sk;else if(goog.LOCALE==
"sl")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_sl;else if(goog.LOCALE=="sq")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_sq;else if(goog.LOCALE=="sr")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_sr;else if(goog.LOCALE=="sv")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_sv;else if(goog.LOCALE=="ta")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_ta;else if(goog.LOCALE=="te")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_te;else if(goog.LOCALE=="th")goog.i18n.DateTimeSymbols=
goog.i18n.DateTimeSymbols_th;else if(goog.LOCALE=="tl")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_tl;else if(goog.LOCALE=="tr")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_tr;else if(goog.LOCALE=="uk")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_uk;else if(goog.LOCALE=="ur")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_ur;else if(goog.LOCALE=="vi")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_vi;else if(goog.LOCALE=="zh")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_zh;
else if(goog.LOCALE=="zh_CN"||goog.LOCALE=="zh-CN")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_zh;else if(goog.LOCALE=="zh_HK"||goog.LOCALE=="zh-HK")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_zh_HK;else if(goog.LOCALE=="zh_TW"||goog.LOCALE=="zh-TW")goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_zh_TW;else goog.i18n.DateTimeSymbols=goog.i18n.DateTimeSymbols_en;goog.provide("goog.i18n.TimeZone");goog.require("goog.array");goog.require("goog.string");goog.i18n.TimeZone=function(){this.timeZoneId_;this.standardOffset_;this.tzNames_;this.transitions_};goog.i18n.TimeZone.MILLISECONDS_PER_HOUR_=3600*1E3;goog.i18n.TimeZone.NameType={STD_SHORT_NAME:0,STD_LONG_NAME:1,DLT_SHORT_NAME:2,DLT_LONG_NAME:3};
goog.i18n.TimeZone.createTimeZone=function(timeZoneData){if(typeof timeZoneData=="number")return goog.i18n.TimeZone.createSimpleTimeZone_(timeZoneData);var tz=new goog.i18n.TimeZone;tz.timeZoneId_=timeZoneData["id"];tz.standardOffset_=-timeZoneData["std_offset"];tz.tzNames_=timeZoneData["names"];tz.transitions_=timeZoneData["transitions"];return tz};
goog.i18n.TimeZone.createSimpleTimeZone_=function(timeZoneOffsetInMinutes){var tz=new goog.i18n.TimeZone;tz.standardOffset_=timeZoneOffsetInMinutes;tz.timeZoneId_=goog.i18n.TimeZone.composePosixTimeZoneID_(timeZoneOffsetInMinutes);var str=goog.i18n.TimeZone.composeUTCString_(timeZoneOffsetInMinutes);tz.tzNames_=[str,str];tz.transitions_=[];return tz};
goog.i18n.TimeZone.composeGMTString_=function(offset){var parts=["GMT"];parts.push(offset<=0?"+":"-");offset=Math.abs(offset);parts.push(goog.string.padNumber(Math.floor(offset/60)%100,2),":",goog.string.padNumber(offset%60,2));return parts.join("")};
goog.i18n.TimeZone.composePosixTimeZoneID_=function(offset){if(offset==0)return"Etc/GMT";var parts=["Etc/GMT",offset<0?"-":"+"];offset=Math.abs(offset);parts.push(Math.floor(offset/60)%100);offset=offset%60;if(offset!=0)parts.push(":",goog.string.padNumber(offset,2));return parts.join("")};
goog.i18n.TimeZone.composeUTCString_=function(offset){if(offset==0)return"UTC";var parts=["UTC",offset<0?"+":"-"];offset=Math.abs(offset);parts.push(Math.floor(offset/60)%100);offset=offset%60;if(offset!=0)parts.push(":",offset);return parts.join("")};goog.i18n.TimeZone.prototype.getTimeZoneData=function(){return{id:this.timeZoneId_,std_offset:-this.standardOffset_,names:goog.array.clone(this.tzNames_),transitions:goog.array.clone(this.transitions_)}};
goog.i18n.TimeZone.prototype.getDaylightAdjustment=function(date){var timeInMs=Date.UTC(date.getUTCFullYear(),date.getUTCMonth(),date.getUTCDate(),date.getUTCHours(),date.getUTCMinutes());var timeInHours=timeInMs/goog.i18n.TimeZone.MILLISECONDS_PER_HOUR_;var index=0;while(index<this.transitions_.length&&timeInHours>=this.transitions_[index])index+=2;return index==0?0:this.transitions_[index-1]};goog.i18n.TimeZone.prototype.getGMTString=function(date){return goog.i18n.TimeZone.composeGMTString_(this.getOffset(date))};
goog.i18n.TimeZone.prototype.getLongName=function(date){return this.tzNames_[this.isDaylightTime(date)?goog.i18n.TimeZone.NameType.DLT_LONG_NAME:goog.i18n.TimeZone.NameType.STD_LONG_NAME]};goog.i18n.TimeZone.prototype.getOffset=function(date){return this.standardOffset_-this.getDaylightAdjustment(date)};
goog.i18n.TimeZone.prototype.getRFCTimeZoneString=function(date){var offset=-this.getOffset(date);var parts=[offset<0?"-":"+"];offset=Math.abs(offset);parts.push(goog.string.padNumber(Math.floor(offset/60)%100,2),goog.string.padNumber(offset%60,2));return parts.join("")};goog.i18n.TimeZone.prototype.getShortName=function(date){return this.tzNames_[this.isDaylightTime(date)?goog.i18n.TimeZone.NameType.DLT_SHORT_NAME:goog.i18n.TimeZone.NameType.STD_SHORT_NAME]};
goog.i18n.TimeZone.prototype.getTimeZoneId=function(){return this.timeZoneId_};goog.i18n.TimeZone.prototype.isDaylightTime=function(date){return this.getDaylightAdjustment(date)>0};goog.provide("goog.i18n.DateTimeFormat");goog.require("goog.asserts");goog.require("goog.i18n.DateTimeSymbols");goog.require("goog.i18n.TimeZone");goog.require("goog.string");goog.i18n.DateTimeFormat=function(pattern){goog.asserts.assert(goog.isDef(pattern),"Pattern must be defined");this.patternParts_=[];if(typeof pattern=="number")this.applyStandardPattern_(pattern);else this.applyPattern_(pattern)};
goog.i18n.DateTimeFormat.Format={FULL_DATE:0,LONG_DATE:1,MEDIUM_DATE:2,SHORT_DATE:3,FULL_TIME:4,LONG_TIME:5,MEDIUM_TIME:6,SHORT_TIME:7,FULL_DATETIME:8,LONG_DATETIME:9,MEDIUM_DATETIME:10,SHORT_DATETIME:11};goog.i18n.DateTimeFormat.TOKENS_=[/^\'(?:[^\']|\'\')*\'/,/^(?:G+|y+|M+|k+|S+|E+|a+|h+|K+|H+|c+|L+|Q+|d+|m+|s+|v+|z+|Z+)/,/^[^\'GyMkSEahKHcLQdmsvzZ]+/];goog.i18n.DateTimeFormat.PartTypes_={QUOTED_STRING:0,FIELD:1,LITERAL:2};
goog.i18n.DateTimeFormat.prototype.applyPattern_=function(pattern){while(pattern)for(var i=0;i<goog.i18n.DateTimeFormat.TOKENS_.length;++i){var m=pattern.match(goog.i18n.DateTimeFormat.TOKENS_[i]);if(m){var part=m[0];pattern=pattern.substring(part.length);if(i==goog.i18n.DateTimeFormat.PartTypes_.QUOTED_STRING)if(part=="''")part="'";else{part=part.substring(1,part.length-1);part=part.replace(/\'\'/,"'")}this.patternParts_.push({text:part,type:i});break}}};
goog.i18n.DateTimeFormat.prototype.format=function(date,opt_timeZone){var diff=opt_timeZone?(date.getTimezoneOffset()-opt_timeZone.getOffset(date))*6E4:0;var dateForDate=diff?new Date(date.getTime()+diff):date;var dateForTime=dateForDate;if(opt_timeZone&&dateForDate.getTimezoneOffset()!=date.getTimezoneOffset()){diff+=diff>0?-24*60*6E4:24*60*6E4;dateForTime=new Date(date.getTime()+diff)}var out=[];for(var i=0;i<this.patternParts_.length;++i){var text=this.patternParts_[i].text;if(goog.i18n.DateTimeFormat.PartTypes_.FIELD==
this.patternParts_[i].type)out.push(this.formatField_(text,date,dateForDate,dateForTime,opt_timeZone));else out.push(text)}return out.join("")};
goog.i18n.DateTimeFormat.prototype.applyStandardPattern_=function(formatType){var pattern;if(formatType<4)pattern=goog.i18n.DateTimeSymbols.DATEFORMATS[formatType];else if(formatType<8)pattern=goog.i18n.DateTimeSymbols.TIMEFORMATS[formatType-4];else if(formatType<12)pattern=goog.i18n.DateTimeSymbols.DATEFORMATS[formatType-8]+" "+goog.i18n.DateTimeSymbols.TIMEFORMATS[formatType-8];else{this.applyStandardPattern_(goog.i18n.DateTimeFormat.Format.MEDIUM_DATETIME);return}this.applyPattern_(pattern)};
goog.i18n.DateTimeFormat.prototype.formatEra_=function(count,date){var value=date.getFullYear()>0?1:0;return count>=4?goog.i18n.DateTimeSymbols.ERANAMES[value]:goog.i18n.DateTimeSymbols.ERAS[value]};goog.i18n.DateTimeFormat.prototype.formatYear_=function(count,date){var value=date.getFullYear();if(value<0)value=-value;return count==2?goog.string.padNumber(value%100,2):String(value)};
goog.i18n.DateTimeFormat.prototype.formatMonth_=function(count,date){var value=date.getMonth();switch(count){case 5:return goog.i18n.DateTimeSymbols.NARROWMONTHS[value];case 4:return goog.i18n.DateTimeSymbols.MONTHS[value];case 3:return goog.i18n.DateTimeSymbols.SHORTMONTHS[value];default:return goog.string.padNumber(value+1,count)}};goog.i18n.DateTimeFormat.prototype.format24Hours_=function(count,date){return goog.string.padNumber(date.getHours()||24,count)};
goog.i18n.DateTimeFormat.prototype.formatFractionalSeconds_=function(count,date){var value=date.getTime()%1E3/1E3;return value.toFixed(Math.min(3,count)).substr(2)+(count>3?goog.string.padNumber(0,count-3):"")};goog.i18n.DateTimeFormat.prototype.formatDayOfWeek_=function(count,date){var value=date.getDay();return count>=4?goog.i18n.DateTimeSymbols.WEEKDAYS[value]:goog.i18n.DateTimeSymbols.SHORTWEEKDAYS[value]};
goog.i18n.DateTimeFormat.prototype.formatAmPm_=function(count,date){var hours=date.getHours();return goog.i18n.DateTimeSymbols.AMPMS[hours>=12&&hours<24?1:0]};goog.i18n.DateTimeFormat.prototype.format1To12Hours_=function(count,date){return goog.string.padNumber(date.getHours()%12||12,count)};goog.i18n.DateTimeFormat.prototype.format0To11Hours_=function(count,date){return goog.string.padNumber(date.getHours()%12,count)};
goog.i18n.DateTimeFormat.prototype.format0To23Hours_=function(count,date){return goog.string.padNumber(date.getHours(),count)};goog.i18n.DateTimeFormat.prototype.formatStandaloneDay_=function(count,date){var value=date.getDay();switch(count){case 5:return goog.i18n.DateTimeSymbols.STANDALONENARROWWEEKDAYS[value];case 4:return goog.i18n.DateTimeSymbols.STANDALONEWEEKDAYS[value];case 3:return goog.i18n.DateTimeSymbols.STANDALONESHORTWEEKDAYS[value];default:return goog.string.padNumber(value,1)}};
goog.i18n.DateTimeFormat.prototype.formatStandaloneMonth_=function(count,date){var value=date.getMonth();switch(count){case 5:return goog.i18n.DateTimeSymbols.STANDALONENARROWMONTHS[value];case 4:return goog.i18n.DateTimeSymbols.STANDALONEMONTHS[value];case 3:return goog.i18n.DateTimeSymbols.STANDALONESHORTMONTHS[value];default:return goog.string.padNumber(value+1,count)}};
goog.i18n.DateTimeFormat.prototype.formatQuarter_=function(count,date){var value=Math.floor(date.getMonth()/3);return count<4?goog.i18n.DateTimeSymbols.SHORTQUARTERS[value]:goog.i18n.DateTimeSymbols.QUARTERS[value]};goog.i18n.DateTimeFormat.prototype.formatDate_=function(count,date){return goog.string.padNumber(date.getDate(),count)};goog.i18n.DateTimeFormat.prototype.formatMinutes_=function(count,date){return goog.string.padNumber(date.getMinutes(),count)};
goog.i18n.DateTimeFormat.prototype.formatSeconds_=function(count,date){return goog.string.padNumber(date.getSeconds(),count)};goog.i18n.DateTimeFormat.prototype.formatTimeZoneRFC_=function(count,date,opt_timeZone){opt_timeZone=opt_timeZone||goog.i18n.TimeZone.createTimeZone(date.getTimezoneOffset());return count<4?opt_timeZone.getRFCTimeZoneString(date):opt_timeZone.getGMTString(date)};
goog.i18n.DateTimeFormat.prototype.formatTimeZone_=function(count,date,opt_timeZone){opt_timeZone=opt_timeZone||goog.i18n.TimeZone.createTimeZone(date.getTimezoneOffset());return count<4?opt_timeZone.getShortName(date):opt_timeZone.getLongName(date)};goog.i18n.DateTimeFormat.prototype.formatTimeZoneId_=function(date,opt_timeZone){opt_timeZone=opt_timeZone||goog.i18n.TimeZone.createTimeZone(date.getTimezoneOffset());return opt_timeZone.getTimeZoneId()};
goog.i18n.DateTimeFormat.prototype.formatField_=function(patternStr,date,dateForDate,dateForTime,opt_timeZone){var count=patternStr.length;switch(patternStr.charAt(0)){case "G":return this.formatEra_(count,dateForDate);case "y":return this.formatYear_(count,dateForDate);case "M":return this.formatMonth_(count,dateForDate);case "k":return this.format24Hours_(count,dateForTime);case "S":return this.formatFractionalSeconds_(count,dateForTime);case "E":return this.formatDayOfWeek_(count,dateForDate);
case "a":return this.formatAmPm_(count,dateForTime);case "h":return this.format1To12Hours_(count,dateForTime);case "K":return this.format0To11Hours_(count,dateForTime);case "H":return this.format0To23Hours_(count,dateForTime);case "c":return this.formatStandaloneDay_(count,dateForDate);case "L":return this.formatStandaloneMonth_(count,dateForDate);case "Q":return this.formatQuarter_(count,dateForDate);case "d":return this.formatDate_(count,dateForDate);case "m":return this.formatMinutes_(count,dateForTime);
case "s":return this.formatSeconds_(count,dateForTime);case "v":return this.formatTimeZoneId_(date,opt_timeZone);case "z":return this.formatTimeZone_(count,date,opt_timeZone);case "Z":return this.formatTimeZoneRFC_(count,date,opt_timeZone);default:return""}};goog.provide("kemia.io.mdl");goog.require("goog.i18n.DateTimeFormat");goog.require("goog.string");goog.require("kemia.model.Reaction");goog.require("kemia.model.Molecule");goog.require("kemia.model.Bond");goog.require("kemia.model.Atom");kemia.io.mdl.SINGLE_BOND=1;kemia.io.mdl.DOUBLE_BOND=2;kemia.io.mdl.TRIPLE_BOND=3;kemia.io.mdl.AROMATIC_BOND=4;kemia.io.mdl.SINGLE_OR_DOUBLE=5;kemia.io.mdl.SINGLE_OR_AROMATIC=6;kemia.io.mdl.DOUBLE_OR_AROMATIC=7;kemia.io.mdl.ANY=8;kemia.io.mdl.TRIPLE_BOND=3;
kemia.io.mdl.NOT_STEREO=0;kemia.io.mdl.SINGLE_BOND_UP=1;kemia.io.mdl.SINGLE_BOND_UP_OR_DOWN=4;kemia.io.mdl.SINGLE_BOND_DOWN=6;kemia.io.mdl.getTypeCode=function(bond){if(bond.aromatic)return kemia.io.mdl.AROMATIC_BOND;if(bond.order==kemia.model.Bond.ORDER.SINGLE)return kemia.io.mdl.SINGLE_BOND;if(bond.order==kemia.model.Bond.ORDER.DOUBLE)return kemia.io.mdl.DOUBLE_BOND;if(bond.order==kemia.model.Bond.ORDER.TRIPLE)return kemia.io.mdl.TRIPLE_BOND;throw new Error("Invalid bond type ["+bond+"]");};
kemia.io.mdl.getStereoCode=function(bond){if(bond.stereo==kemia.model.Bond.STEREO.UP)return kemia.io.mdl.SINGLE_BOND_UP;if(bond.stereo==kemia.model.Bond.STEREO.DOWN)return kemia.io.mdl.SINGLE_BOND_DOWN;if(bond.stereo==kemia.model.Bond.STEREO.UP_OR_DOWN)return kemia.io.mdl.SINGLE_BOND_UP_OR_DOWN;return kemia.io.mdl.NOT_STEREO};
kemia.io.mdl.createBond=function(type,stereo,source,target){switch(type){case kemia.io.mdl.SINGLE_BOND:switch(stereo){case kemia.io.mdl.NOT_STEREO:return new kemia.model.Bond(source,target);case kemia.io.mdl.SINGLE_BOND_UP:return new kemia.model.Bond(source,target,kemia.model.Bond.ORDER.SINGLE,kemia.model.Bond.STEREO.UP);case kemia.io.mdl.SINGLE_BOND_UP_OR_DOWN:return new kemia.model.Bond(source,target,kemia.model.Bond.ORDER.SINGLE,kemia.model.Bond.STEREO.UP_OR_DOWN);case kemia.io.mdl.SINGLE_BOND_DOWN:return new kemia.model.Bond(source,
target,kemia.model.Bond.ORDER.SINGLE,kemia.model.Bond.DOWN);default:throw new Error("invalid bond type/stereo ["+type+"]/["+stereo+"]");}case kemia.io.mdl.DOUBLE_BOND:return new kemia.model.Bond(source,target,kemia.model.Bond.ORDER.DOUBLE);case kemia.io.mdl.TRIPLE_BOND:return new kemia.model.Bond(source,target,kemia.model.Bond.ORDER.TRIPLE);case kemia.io.mdl.AROMATIC_BOND:var bond=new kemia.model.Bond(source,target);bond.aromatic=true;return bond;case kemia.io.mdl.SINGLE_OR_DOUBLE:throw new Error("type not implemented ["+
type+"]");case kemia.io.mdl.SINGLE_OR_AROMATIC:throw new Error("type not implemented ["+type+"]");case kemia.io.mdl.DOUBLE_OR_AROMATIC:throw new Error("type not implemented ["+type+"]");case kemia.io.mdl.ANY:throw new Error("type not implemented ["+type+"]");default:throw new Error("invalid bond type/stereo ["+type+"]/["+stereo+"]");}};
kemia.io.mdl.readMolfile=function(molfile){var lineDelimiter=molfile.indexOf("\r\n")>0?"\r\n":"\n";var mol_lines=molfile.split(lineDelimiter);var name=mol_lines[0];var mol=new kemia.model.Molecule(name);var atom_count=parseInt(mol_lines[3].substr(0,3));var bond_count=parseInt(mol_lines[3].substr(3,3));for(var i=1;i<=atom_count;i++){var line=mol_lines[i+3];var symbol=line.substr(30,4).replace(/(^\s*)|(\s*$)/g,"");var x=parseFloat(line.substr(0,10));var y=parseFloat(line.substr(10,10));var ctfile_dd=
parseInt(line.substr(34,2));var ctfile_ccc=parseInt(line.substr(36,3));var charge=0;if(ctfile_ccc==0);else if(ctfile_ccc==1)charge=3;else if(ctfile_ccc==2)charge=2;else if(ctfile_ccc==3)charge=1;else if(ctfile_ccc==4);else if(ctfile_ccc==5)charge=-1;else if(ctfile_ccc==6)charge=-2;else if(ctfile_ccc==7)charge=-3;var atom=new kemia.model.Atom(symbol,x,y,charge);mol.addAtom(atom)}for(var i=1;i<=bond_count;i++){var line=mol_lines[i+3+atom_count];var sourceAtom=mol.getAtom(parseInt(line.substr(0,3))-
1);var targetAtom=mol.getAtom(parseInt(line.substr(3,3))-1);var bondType=parseInt(line.substr(6,3));var bondStereoType=parseInt(line.substr(9,3));var bond=kemia.io.mdl.createBond(bondType,bondStereoType,sourceAtom,targetAtom);mol.addBond(bond)}var i=4+atom_count+bond_count,il=mol_lines.length;var superseded=false;while(true){var line=mol_lines[i++];if(i==il||line.indexOf("M END")>=0)break;if(line.indexOf("M CHG")>=0){if(!superseded){for(var j=0,jl=mol.countAtoms();j<jl;j++)mol.getAtom(j).charge=
0;superseded=true}var nn=parseInt(line.substr(6,3));for(var k=0;k<nn;k++){var atomNum=parseInt(line.substr(10+8*k,3));var charge=parseInt(line.substr(14+8*k,3));mol.getAtom(atomNum-1).charge=charge}}}return mol};
kemia.io.mdl.writeRxnfile=function(reaction){var result="";result+="$RXN\n\n\n\n";result+=(goog.string.repeat(" ",3)+reaction.reactants.length).slice(-3);result+=(goog.string.repeat(" ",3)+reaction.products.length).slice(-3);result+="\n";goog.array.forEach(reaction.reactants,function(mol){result+="$MOL\n";result+=kemia.io.mdl.writeMolfile(mol)});goog.array.forEach(reaction.products,function(mol){result+="$MOL\n";result+=kemia.io.mdl.writeMolfile(mol)});return result};
kemia.io.mdl.writeMolfile=function(mol){var molFile=new String;var headerBlock=new String;var countsLine=new String;var atomBlock=new String;var bondBlock=new String;var now=new Date;var line1=mol.name+"\n";var fmt=new goog.i18n.DateTimeFormat("mmddyyHHMM");var line2=" "+"JChemHub"+fmt.format(now)+"\n";var line3="\n";var headerBlock=line1+line2+line3;var atomCount=(goog.string.repeat(" ",3)+mol.countAtoms()).slice(-3);var bondCount=(goog.string.repeat(" ",3)+mol.countBonds()).slice(-3);countsLine=
atomCount+bondCount+" 0 0 0 0 999 V2000\n";for(i=0;i<mol.countAtoms();i++){var atom=mol.getAtom(i);var xPos=(goog.string.repeat(" ",10)+atom.coord.x.toFixed(4)).slice(-10);var yPos=(goog.string.repeat(" ",10)+atom.coord.y.toFixed(4)).slice(-10);var zPos=(goog.string.repeat(" ",10)+(0).toFixed(4)).slice(-10);var atomSymbol=(goog.string.repeat(" ",3)+atom.symbol).slice(-3);var filler=" 0 0 0 0 0 0 0 0 0 0 0 0";atomBlock+=xPos+yPos+zPos+atomSymbol+"\n"}for(i=0;i<mol.countBonds();i++){var bond=
mol.getBond(i);var firstAtomNumber=mol.indexOfAtom(bond.source)+1;var firstAtomString=(goog.string.repeat(" ",3)+firstAtomNumber).slice(-3);var secondAtomNumber=mol.indexOfAtom(bond.target)+1;var secondAtomString=(goog.string.repeat(" ",3)+secondAtomNumber).slice(-3);var bondTypeString=(goog.string.repeat(" ",3)+kemia.io.mdl.getTypeCode(bond)).slice(-3);var stereoTypeString=(goog.string.repeat(" ",3)+kemia.io.mdl.getStereoCode(bond)).slice(-3);bondBlock+=firstAtomString+secondAtomString+bondTypeString+
stereoTypeString+"\n"}molFile=headerBlock+countsLine+atomBlock+bondBlock+"M END\n";return molFile};
kemia.io.mdl.readRxnfile=function(rxnfile){var lineDelimiter=rxnfile.indexOf("\r\n")>0?"\r\n":"\n";var rxn_lines=rxnfile.split(lineDelimiter,5);if(rxn_lines[0].indexOf("$RXN")<0)throw"not a RXN file";var reaction=new kemia.model.Reaction;reaction.header=rxn_lines[2]+lineDelimiter+rxn_lines[3];var reactant_count=parseInt(rxn_lines[4].substr(0,3));var product_count=parseInt(rxn_lines[4].substr(3,3));var rxn_blocks=rxnfile.split("$MOL"+lineDelimiter);for(var i=1,il=reactant_count;i<=il;i++){var mol=
kemia.io.mdl.readMolfile(rxn_blocks[i]);reaction.addReactant(mol)}for(var i=1,il=product_count;i<=il;i++){var mol=kemia.io.mdl.readMolfile(rxn_blocks[i+reactant_count]);reaction.addProduct(mol)}return reaction};goog.provide("kemia.query.DFSMapper");goog.require("kemia.ring.RingFinder");goog.require("goog.structs.Map");
(function(){function simpleSort(a,b){return a-b}kemia.query.DFSMapper=function(query){var Type={MapFirst:0,MapUnique:1,MapAll:2};this.query=query;function getStartAtom(query){return query.getAtom(0)}function State(type,query,queried){this.type=type;this.query=query;this.queried=queried;this.sssr=queried.getRings();this.queryPath=[];this.queriedPath=[];this.candidates=[]}function checkForMap(state,maps){if(state.queryPath.length===state.query.countAtoms()){var map=new goog.structs.Map;for(var k=0,
kl=state.queryPath.length;k<kl;k++)map.set(state.query.indexOfAtom(state.queryPath[k]),state.queried.indexOfAtom(state.queriedPath[k]));if(state.type===Type.MapUnique){var values=map.getValues();values.sort(simpleSort);var isUnique=true;for(k=0,kl=maps.length;k<kl;k++){var kValues=maps[k].getValues();kValues.sort(simpleSort);if(goog.array.equals(values,kValues))isUnique=false}if(isUnique)maps.push(map)}else maps.push(map);if(state.type===Type.MapFirst)return}}function matchCandidate(state,queryAtom,
queriedAtom,queryNbr,queriedNbr,maps){if(goog.array.indexOf(state.queryPath,queryNbr)!==-1)return false;if(goog.array.indexOf(state.queriedPath,queriedNbr)!==-1)return false;if(!queryNbr.matches(queriedNbr,state.queried,state.sssr))return false;var queryBond=state.query.findBond(queryAtom,queryNbr);var queriedBond=state.queried.findBond(queriedAtom,queriedNbr);if(!queryBond.matches(queriedBond,state.queried,state.sssr))return false;state.queryPath.push(queryNbr);state.queriedPath.push(queriedNbr);
checkForMap(state,maps);return true}function DFS(state,queryAtom,queriedAtom,maps){var queryNbrs=queryAtom.getNeighbors();var queriedNbrs=queriedAtom.getNeighbors();var candidates=[];for(var i=0,li=queryNbrs.length;i<li;i++){var queryNbr=queryNbrs[i];for(var j=0,lj=queriedNbrs.length;j<lj;j++){var queriedNbr=queriedNbrs[j];candidates.push({queryAtom:queryAtom,queryNbr:queryNbr,queriedAtom:queriedAtom,queriedNbr:queriedNbr})}}if(state.candidates.length)state.candidates.push(state.candidates[state.candidates.length-
1].concat(candidates));else state.candidates.push(candidates);while(state.candidates[state.candidates.length-1].length){var candidate=state.candidates[state.candidates.length-1].pop();if(matchCandidate(state,candidate.queryAtom,candidate.queriedAtom,candidate.queryNbr,candidate.queriedNbr,maps)){DFS(state,candidate.queryNbr,candidate.queriedNbr,maps);state.queryPath.pop();state.queriedPath.pop();state.candidates.pop()}}}function mapNext(i,type,query,queryAtom,queried,maps,callback){var state=new State(type,
query,queried);var queriedAtom=queried.getAtom(i);if(queryAtom.matches(queriedAtom)){state.queryPath.push(queryAtom);state.queriedPath.push(queriedAtom);DFS(state,queryAtom,queriedAtom,maps)}i++;if(i<queried.countAtoms()){var nextBitOfWork=function(){mapNext(i,type,query,queryAtom,queried,maps,callback)};setTimeout(nextBitOfWork,0)}else callback(maps)}this.mapAll=function(queried){var maps=[];var queryAtom=getStartAtom(this.query);for(var i=0,li=queried.countAtoms();i<li;i++){var state=new State(Type.MapAll,
this.query,queried);var queriedAtom=queried.getAtom(i);if(!queryAtom.matches(queriedAtom))continue;if(this.query.countAtoms()>1){state.queryPath.push(queryAtom);state.queriedPath.push(queriedAtom);DFS(state,queryAtom,queriedAtom,maps)}else{var map=new goog.structs.Map;map.set(state.query.indexOfAtom(queryAtom),state.queried.indexOfAtom(queriedAtom));maps.push(map)}}return maps};this.mapAllCallback=function(queried,callback){var maps=[];var queryAtom=getStartAtom(this.query);var i=0;mapNext(i,Type.MapAll,
this.query,queryAtom,queried,maps,callback)};this.mapUnique=function(queried){var maps=[];var queryAtom=getStartAtom(this.query);for(var i=0,li=queried.countAtoms();i<li;i++){var state=new State(Type.MapUnique,this.query,queried);var queriedAtom=queried.getAtom(i);if(!queryAtom.matches(queriedAtom))continue;if(this.query.countAtoms()>1){state.queryPath.push(queryAtom);state.queriedPath.push(queriedAtom);DFS(state,queryAtom,queriedAtom,maps)}else{var map=new goog.structs.Map;map.set(state.query.indexOfAtom(queryAtom),
state.queried.indexOfAtom(queriedAtom));maps.push(map)}}return maps};this.mapUniqueCallback=function(queried,callback){var maps=[];var queryAtom=getStartAtom(this.query);var i=0;mapNext(i,Type.MapUnique,this.query,queryAtom,queried,maps,callback)};this.mapFirst=function(queried){var maps=[];var queryAtom=getStartAtom(this.query);for(var i=0,li=queried.countAtoms();i<li;i++){var state=new State(Type.MapFirst,this.query,queried);var queriedAtom=queried.getAtom(i);if(!queryAtom.matches(queriedAtom))continue;
if(this.query.countAtoms()>1){state.queryPath.push(queryAtom);state.queriedPath.push(queriedAtom);DFS(state,queryAtom,queriedAtom,maps)}else{var map=new goog.structs.Map;map.set(state.query.indexOfAtom(queryAtom),state.queried.indexOfAtom(queriedAtom));return map}if(maps.length)return maps[0]}return new goog.structs.Map}}})();goog.provide("kemia.io.smiles");goog.require("kemia.model.Molecule");goog.require("kemia.model.Atom");goog.require("kemia.model.Bond");goog.require("kemia.model.Reaction");kemia.io.smiles.BondType={NONE:"NONE",SINGLE_BOND:"-",DOUBLE_BOND:"=",TRIPLE_BOND:"#",QUAD_BOND:"$",AROMATIC_BOND:":",ANY:"~"};kemia.io.smiles.BondStereo={NONE:"NONE",CLOCKWISE:"@",COUNTER_CLOCKWISE:"@@"};
kemia.io.smiles.punctuation={nobond:".",openbranch:"(",closebranch:")",singlebond:kemia.io.smiles.BondType.SINGLE_BOND,doublebond:kemia.io.smiles.BondType.DOUBLE_BOND,triplebond:kemia.io.smiles.BondType.TRIPLE_BOND,quadbond:kemia.io.smiles.BondType.QUAD_BOND,aromaticbond:kemia.io.smiles.BondType.AROMATIC_BOND,ringclosure:"%",cis:"/",trans:"\\"};kemia.io.smiles.smiPattern=new RegExp(/\[[^[]+\]|Br|B|Cl|C|N|F|O|P]|S|c|n|o|s|-|=|#|%[0-9][0-9]|[0-9]|\(|\)|./g);kemia.io.smiles.atomPattern=new RegExp(/^\[([0-9]*)([A-Z][a-z]?|c|n|o|se|s|as)(@|@@)?(H)?([0-9])?([+-][\d]?)?\]$/);
kemia.io.smiles.specialAtoms={C:1,c:1,N:1,n:1,O:1,o:1,S:1,s:1,P:1,F:1,Br:1,Cl:1,I:1,B:1};kemia.io.smiles.aromaticAtoms={c:1,n:1,o:1,s:1,as:1,se:1};
kemia.io.smiles.parse=function(smi){items=smi.match(this.smiPattern);var mol=new kemia.model.Molecule(smi);var natoms=0;var previous_atom;var bond_type=kemia.io.smiles.BondType.NONE;var bond_stereo=kemia.io.smiles.BondStereo.NONE;var branch=new Array;var ring=new Array;var errstr="";for(var i=0;i<items.length;i++){var item=items[i];if(item==this.punctuation.nobond);else if(item==this.punctuation.openbranch)branch.push(previous_atom);else if(item==this.punctuation.closebranch)if(branch.length)previous_atom=
branch.pop();else errstr=" unbalanced parens";else if(item==this.punctuation.singlebond)bond_type=kemia.io.smiles.BondType.SINGLE_BOND;else if(item==this.punctuation.doublebond)bond_type=kemia.io.smiles.BondType.DOUBLE_BOND;else if(item==this.punctuation.triplebond)bond_type=kemia.io.smiles.BondType.TRIPLE_BOND;else if(item==this.punctuation.quadbond)bond_type=kemia.io.smiles.BondType.QUAD_BOND;else if(item==this.punctuation.aromaticbond)bond_type=kemia.io.smiles.BondType.AROMATIC_BOND;else if(item[0]==
this.punctuation.ringclosure){ringid=parseInt(item[1]+item[2]);ring_atom=ring[ringid];if(ring_atom){mol.addBond(this.createBond(bond_type,bond_stereo,previous_atom,ring_atom));bond_type=kemia.io.smiles.BondType.NONE;bond_stereo=kemia.io.smiles.BondStereo.NONE;ring[ringid]=null}else ring[ringid]=previous_atom}else if(item==this.punctuation.cis);else if(item==this.punctuation.trans);else if(!isNaN(ringid=parseInt(item))){ring_atom=ring[ringid];if(ring_atom){mol.addBond(this.createBond(bond_type,bond_stereo,
previous_atom,ring_atom));bond_type=kemia.io.smiles.BondType.NONE;bond_stereo=kemia.io.smiles.BondStereo.NONE;ring[ringid]=null}else ring[ringid]=previous_atom}else{smi_atom=this.parseAtom(item);if(smi_atom.symbol){natoms+=1;var atom=new kemia.model.Atom(smi_atom.symbol,0,0,smi_atom.charge,smi_atom.aromatic,smi_atom.isotope);if(previous_atom){mol.addBond(this.createBond(bond_type,bond_stereo,previous_atom,atom));bond_type=kemia.io.smiles.BondType.NONE;bond_stereo=kemia.io.smiles.BondStereo.NONE}mol.addAtom(atom);
bond_stereo=smi_atom.stereo;previous_atom=atom}else errstr=" unknown atom "+item}if(errstr){throw new Error(smi+errstr);break}}if(this.sanityCheck(branch,ring,bond_type,bond_stereo))return mol;else return null};
kemia.io.smiles.sanityCheck=function(branch,ring,bond_type,bond_stereo){if(branch.length){throw new Error(smi+" unbalanced parens");return false}for(var i=0;i<ring.length;++i)if(ring[i]){throw new Error(smi+" unclosed rings");return false}if(bond_type!=this.BondType.NONE){throw new Error(smi+" unpaired bond "+bond_type);return false}return true};
kemia.io.smiles.parseAtom=function(item){var atom={isotope:null,symbol:null,stereo:kemia.io.smiles.BondStereo.NONE,hcount:null,charge:null,aromatic:false};var atomProp=this.atomPattern.exec(item);if(atomProp){atom.isotope=atomProp[1];if(this.periodicTable[atomProp[2]])atom.symbol=atomProp[2];if(atomProp[3]==kemia.io.smiles.BondStereo.CLOCKWISE)atom.stereo=atomProp[3];else if(atomProp[3]==kemia.io.smiles.BondStereo.COUNTER_CLOCKWISE)atom.stereo=atomProp[3];else atom.stereo=kemia.io.smiles.BondStereo.NONE;
if(atomProp[4]=="H")if(atomProp[5])atom.hcount=atomProp[5];else atom.hcount=1;if(atomProp[6]=="+")atom.charge=1;else if(atomProp[6]=="-")atom.charge=-1;else atom.charge=parseInt(atomProp[6])}else if(this.specialAtoms[item])atom.symbol=item;if(this.aromaticAtoms[atom.symbol]){atom.aromatic=true;if(atom.symbol.length==1)atom.symbol=atom.symbol.toUpperCase();else atom.symbol=atom.symbol[0].toUpperCase()+atom.symbol[1]}return atom};
kemia.io.smiles.createBond=function(type,stereo,source,target){var atype=type;if(type==kemia.io.smiles.BondType.NONE)if(source.aromatic&&target.aromatic)atype=kemia.io.smiles.BondType.AROMATIC_BOND;else atype=kemia.io.smiles.BondType.SINGLE_BOND;switch(atype){case kemia.io.smiles.BondType.SINGLE_BOND:switch(stereo){case kemia.io.smiles.BondStereo.CLOCKWISE:return new kemia.model.Bond(source,target,kemia.model.Bond.ORDER.SINGLE,kemia.model.Bond.STEREO.UP);case kemia.io.smiles.BondStereo.COUNTER_CLOCKWISE:return new kemia.model.Bond(source,
target,kemia.model.Bond.ORDER.SINGLE,kemia.model.Bond.STEREO.DOWN);case kemia.io.smiles.BondStereo.NONE:return new kemia.model.Bond(source,target,kemia.model.Bond.ORDER.SINGLE);default:throw new Error("invalid bond type/stereo ["+type+"]/["+stereo+"]");}case kemia.io.smiles.BondType.DOUBLE_BOND:return new kemia.model.Bond(source,target,kemia.model.Bond.ORDER.DOUBLE);case kemia.io.smiles.BondType.TRIPLE_BOND:return new kemia.model.Bond(source,target,kemia.model.Bond.ORDER.TRIPLE);case kemia.io.smiles.BondType.AROMATIC_BOND:var bond=
new kemia.model.Bond(source,target);bond.aromatic=true;return bond;case kemia.io.smiles.BondType.ANY:default:throw new Error("invalid bond type/stereo ["+type+"]/["+stereo+"]");}};
kemia.io.smiles.periodicTable={H:{number:1,name:"Hydrogen"},He:{number:2,name:"Helium"},Li:{number:3,name:"Lithium"},Be:{number:4,name:"Beryllium"},B:{number:5,name:"Boron"},C:{number:6,name:"Carbon"},c:{number:6,name:"Carbon"},N:{number:7,name:"Nitrogen"},n:{number:7,name:"Nitrogen"},O:{number:8,name:"Oxygen"},o:{number:8,name:"Oxygen"},F:{number:9,name:"Fluorine"},Ne:{number:10,name:"Neon"},Na:{number:11,name:"Sodium"},Mg:{number:12,name:"Magnesium"},Al:{number:13,name:"Aluminium"},Si:{number:14,
name:"Silicon"},P:{number:15,name:"Phosphorus"},S:{number:16,name:"Sulfur"},s:{number:16,name:"Sulfur"},Cl:{number:17,name:"Chlorine"},Ar:{number:18,name:"Argon"},K:{number:19,name:"Potassium"},Ca:{number:20,name:"Calcium"},Sc:{number:21,name:"Scandium"},Ti:{number:22,name:"Titanium"},V:{number:23,name:"Vanadium"},Cr:{number:24,name:"Chromium"},Mn:{number:25,name:"Manganese"},Fe:{number:26,name:"Iron"},Co:{number:27,name:"Cobalt"},Ni:{number:28,name:"Nickel"},Cu:{number:29,name:"Copper"},Zn:{number:30,
name:"Zinc"},Ga:{number:31,name:"Gallium"},Ge:{number:32,name:"Germanium"},As:{number:33,name:"Arsenic"},as:{number:33,name:"Arsenic"},Se:{number:34,name:"Selenium"},se:{number:34,name:"Selenium"},Br:{number:35,name:"Bromine"},Kr:{number:36,name:"Krypton"},Rb:{number:37,name:"Rubidium"},Sr:{number:38,name:"Strontium"},Y:{number:39,name:"Yttrium"},Zr:{number:40,name:"Zirconium"},Nb:{number:41,name:"Niobium"},Mo:{number:42,name:"Molybdenum"},Tc:{number:43,name:"Technetium"},Ru:{number:44,name:"Ruthenium"},
Rh:{number:45,name:"Rhodium"},Pd:{number:46,name:"Palladium"},Ag:{number:47,name:"Silver"},Cd:{number:48,name:"Cadmium"},In:{number:49,name:"Indium"},Sn:{number:50,name:"Tin"},Sb:{number:51,name:"Antimony"},Te:{number:52,name:"Tellurium"},I:{number:53,name:"Iodine"},Xe:{number:54,name:"Xenon"},Cs:{number:55,name:"Caesium"},Ba:{number:56,name:"Barium"},La:{number:57,name:"Lanthanum"},Ce:{number:58,name:"Cerium"},Pr:{number:59,name:"Praseodymium"},Nd:{number:60,name:"Neodymium"},Pm:{number:61,name:"Promethium"},
Sm:{number:62,name:"Samarium"},Eu:{number:63,name:"Europium"},Gd:{number:64,name:"Gadolinium"},Tb:{number:65,name:"Terbium"},Dy:{number:66,name:"Dysprosium"},Ho:{number:67,name:"Holmium"},Er:{number:68,name:"Erbium"},Tm:{number:69,name:"Thulium"},Yb:{number:70,name:"Ytterbium"},Lu:{number:71,name:"Lutetium"},Hf:{number:72,name:"Hafnium"},Ta:{number:73,name:"Tantalum"},W:{number:74,name:"Tungsten"},Re:{number:75,name:"Rhenium"},Os:{number:76,name:"Osmium"},Ir:{number:77,name:"Iridium"},Pt:{number:78,
name:"Platinum"},Au:{number:79,name:"Gold"},Hg:{number:80,name:"Mercury"},Tl:{number:81,name:"Thallium"},Pb:{number:82,name:"Lead"},Bi:{number:83,name:"Bismuth"},Po:{number:84,name:"Polonium"},At:{number:85,name:"Astatine"},Rn:{number:86,name:"Radon"},Fr:{number:87,name:"Francium"},Ra:{number:88,name:"Radium"},Ac:{number:89,name:"Actinium"},Th:{number:90,name:"Thorium"},Pa:{number:91,name:"Protactinium"},U:{number:92,name:"Uranium"},Np:{number:93,name:"Neptunium"},Pu:{number:94,name:"Plutonium"},
Am:{number:95,name:"Americium"},Cm:{number:96,name:"Curium"},Bk:{number:97,name:"Berkelium"},Cf:{number:98,name:"Californium"},Es:{number:99,name:"Einsteinium"},Fm:{number:100,name:"Fermium"},Md:{number:101,name:"Mendelevium"},No:{number:102,name:"Nobelium"},Lr:{number:103,name:"Lawrencium"},Rf:{number:104,name:"Rutherfordium"},Db:{number:105,name:"Dubnium"},Sg:{number:106,name:"Seaborgium"},Bh:{number:107,name:"Bohrium"},Hs:{number:108,name:"Hassium"},Mt:{number:109,name:"Meitnerium"},Ds:{number:110,
name:"Darmstadtium"},Rg:{number:111,name:"Roentgenium"},Cn:{number:112,name:"Copernicium"}};goog.provide("kemia.query.Query");
(function(){kemia.query.IQuery=function(){throw Error("IQuery: Interface should never be constructed!");this.addAtom=function(atom){};this.addBond=function(bond){};this.countAtoms=function(){};this.getAtom=function(index){};this.findBond=function(atom1,atom2){};this.indexOfAtom=function(atom){}};kemia.query.IQueryAtom=function(){this.matches=function(atom,opt_molecule,opt_sssr){};this.getNeighbors=function(){}};kemia.query.IQueryBond=function(source,target){this.matches=function(bond,opt_molecule,
opt_sssr){}};kemia.query.IQueryCompiler={compile:function(variable){}};kemia.query.IMapper=function(query){this.mapFirst=function(molecule){};this.mapUnique=function(molecule){};this.mapUniqueCallback=function(molecule,callback){}};kemia.query.Query=function(){this.atoms=[];this.bonds=[];this.isSSSRRequired=false};kemia.query.Query.prototype.countAtoms=function(){return this.atoms.length};kemia.query.Query.prototype.indexOfAtom=function(atom){return goog.array.indexOf(this.atoms,atom)};kemia.query.Query.prototype.getAtom=
function(index){return this.atoms[index]};kemia.query.Query.prototype.addAtom=function(atom){this.atoms.push(atom)};kemia.query.Query.prototype.addBond=function(bond){bond.source.neighbors.push(bond.target);bond.target.neighbors.push(bond.source);this.bonds.push(bond)};kemia.query.Query.prototype.findBond=function(atom1,atom2){for(var i=0,il=this.bonds.length;i<il;i++){var bond=this.bonds[i];if(atom1===bond.source&&atom2===bond.target||atom2===bond.source&&atom1===bond.target)return bond}return null};
kemia.query.QueryAtom=function(){this.symbols=[];this.valence=0;this.neighbors=[]};kemia.query.QueryAtom.prototype.matches=function(atom,opt_molecule,opt_sssr){var symbolMatches=true;if(this.symbols.length)if(goog.array.indexOf(this.symbols,atom.symbol)===-1)symbolMatches=false;var valenceMatches=this.valence<=atom.countBonds();return symbolMatches&&valenceMatches};kemia.query.QueryAtom.prototype.getNeighbors=function(){return this.neighbors};kemia.query.QueryBond=function(source,target){this.orders=
[];this.source=source;this.target=target};kemia.query.QueryBond.prototype.matches=function(bond,opt_molecule,opt_sssr){if(!this.orders.length)return true;if(goog.array.indexOf(this.orders,bond.order)!==-1)return true;return false}})();goog.provide("kemia.query.MoleculeCompiler");goog.require("kemia.query.Query");
(function(){kemia.query.MoleculeCompiler={};kemia.query.MoleculeCompiler.compile=function(molecule){var query=new kemia.query.Query;for(var i=0,li=molecule.countAtoms();i<li;i++){var qatom=new kemia.query.QueryAtom;qatom.symbols.push(molecule.getAtom(i).symbol);query.addAtom(qatom)}for(i=0,li=molecule.countBonds();i<li;i++){var bond=molecule.bonds[i];var source=query.getAtom(molecule.indexOfAtom(bond.source));var target=query.getAtom(molecule.indexOfAtom(bond.target));var qbond=new kemia.query.QueryBond(source,
target);qbond.orders.push(bond.order);query.addBond(qbond)}return query}})();goog.provide("kemia.query.SmilesCompiler");goog.require("kemia.io.smiles");goog.require("kemia.query.MoleculeCompiler");(function(){kemia.query.SmilesCompiler={};kemia.query.SmilesCompiler.compile=function(smiles){var molecule=kemia.io.smiles.parse(smiles);var query=kemia.query.MoleculeCompiler.compile(molecule);return query}})();

Blog | Support | Training | Job Board | Contact | API | Status | Twitter | Help
© 2010 GitHub Inc. All rights reserved. | Terms | Privacy | Security
Powered by the Dedicated Servers and
Cloud Computing of Rackspace Hosting®
Dedicated Server
  • English
  • Català
  • Čeština
  • Deutsch
  • Español
  • Français
  • Hrvatski
  • Indonesia
  • Italiano
  • 日本語
  • Nederlands
  • Norsk
  • Polski
  • Português (BR)
  • Српски
  • Svenska
  • 中文